C#如何将类 作为参数传递

时间:2022-01-02 04:20:29
假设我要实现这样一个功能.主程序有若干form
form1,form2,form3.....
现在要写一个函数函数void showForm(Form frm)
能实现showForm(form1)就显示form1吗,showForm(form2)就显示form2吗.....?

8 个解决方案

#1


class Form1:Form{}
class Form2:Form{}
class Form3:Form{}

void ShowForm(Form frm) 
{
   frm.Show();
}

调用的地方
ShowForm(new Form1); //显示Form1
ShowForm(new Form2); //显示Form2

不过这样做太多此一举了吧

#2


可以啊,这个就是多态的特性啊.只要他们是继承自同一个基类的就可以了.就是按照你说的那样就可以,参数是Form类型的.

#3


用反射!

        /// <param name="GetDllPath">DLL文件路径</param>
        /// <param name="MethodName">你的FORM1,FORM2,的类名称,但是要完整</param>
        public static void ShowFormByName(string GetDllPath,string FormClassName)
        {
            System.Security.Policy.Evidence e = new System.Security.Policy.Evidence();
            Assembly l = System.Reflection.Emit.AssemblyBuilder.LoadFile(GetDllPath);
            object temp = l.CreateInstance(FormClassName, false, BindingFlags.Default, null, null, null, null);
((Form)temp).Show();
        }

#4


     private void showForm(Form frm)
        {

            this.mainPanel.Controls.Clear();
            frm.TopLevel = false;
            frm.Dock = DockStyle.Fill;
            frm.FormBorderStyle = FormBorderStyle.None;
            frm.Parent = mainPanel;
            frm.Show();
            this.Text = frm.Text;

        }

      showForm(frmStock );
我这样写为什么不对,帮忙看一下...
其中(frmStock)是已经存在的一个form窗体!!

#5


错误 1 “test.frmStock”是“类型”,但此处被当做“变量”来使用
报这个错误

#6


引用 2 楼 yfqvip 的回复:
可以啊,这个就是多态的特性啊.只要他们是继承自同一个基类的就可以了.就是按照你说的那样就可以,参数是Form类型的.

up

#7


自己解决了啊!!结贴了.提了一个很幼稚的问题.....

#8


mainPanel?你想把窗体放在面板里面?好像不行吧,你可以试试MDI
先把主窗体的IsMdiContainer设置为true
     private void showForm(Form frm)
        {
            frm.MdiParent = this;
            frm.TopLevel = false;
            frm.Dock = DockStyle.Fill;
            frm.FormBorderStyle = FormBorderStyle.None;
            frm.Show();
            this.Text = frm.Text;
        }

#1


class Form1:Form{}
class Form2:Form{}
class Form3:Form{}

void ShowForm(Form frm) 
{
   frm.Show();
}

调用的地方
ShowForm(new Form1); //显示Form1
ShowForm(new Form2); //显示Form2

不过这样做太多此一举了吧

#2


可以啊,这个就是多态的特性啊.只要他们是继承自同一个基类的就可以了.就是按照你说的那样就可以,参数是Form类型的.

#3


用反射!

        /// <param name="GetDllPath">DLL文件路径</param>
        /// <param name="MethodName">你的FORM1,FORM2,的类名称,但是要完整</param>
        public static void ShowFormByName(string GetDllPath,string FormClassName)
        {
            System.Security.Policy.Evidence e = new System.Security.Policy.Evidence();
            Assembly l = System.Reflection.Emit.AssemblyBuilder.LoadFile(GetDllPath);
            object temp = l.CreateInstance(FormClassName, false, BindingFlags.Default, null, null, null, null);
((Form)temp).Show();
        }

#4


     private void showForm(Form frm)
        {

            this.mainPanel.Controls.Clear();
            frm.TopLevel = false;
            frm.Dock = DockStyle.Fill;
            frm.FormBorderStyle = FormBorderStyle.None;
            frm.Parent = mainPanel;
            frm.Show();
            this.Text = frm.Text;

        }

      showForm(frmStock );
我这样写为什么不对,帮忙看一下...
其中(frmStock)是已经存在的一个form窗体!!

#5


错误 1 “test.frmStock”是“类型”,但此处被当做“变量”来使用
报这个错误

#6


引用 2 楼 yfqvip 的回复:
可以啊,这个就是多态的特性啊.只要他们是继承自同一个基类的就可以了.就是按照你说的那样就可以,参数是Form类型的.

up

#7


自己解决了啊!!结贴了.提了一个很幼稚的问题.....

#8


mainPanel?你想把窗体放在面板里面?好像不行吧,你可以试试MDI
先把主窗体的IsMdiContainer设置为true
     private void showForm(Form frm)
        {
            frm.MdiParent = this;
            frm.TopLevel = false;
            frm.Dock = DockStyle.Fill;
            frm.FormBorderStyle = FormBorderStyle.None;
            frm.Show();
            this.Text = frm.Text;
        }