通过类名创建类的实例(反射)

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:22:38
有窗体Form1,Form2,… 。现在在窗体FormMain中有一个方法,改方法有一个string类型的参数,
该参数值可以是“Form1”,“Form2”……,如何通过该参数生成类名称为该参数的窗体的实例,并Show()该窗体?
我试了System.Reflection.Assembly a; a.CreateInstance("Form1");不知道怎么Show窗体Form1
谢谢 ,我搞错了,调用了自己的方法了

如果那些需要被反射的Form与FormMain在同一程序集中,可以用Activator类反射Form对象:
Form f = (Form)Activator.CreateInstance(Type.GetType(name));
然后
f.Visible = true;
f.Show(); // 非模态,或按模态方式显示 f.ShowDialog()
注意,name参数必须是要反射的Form对象的带命名空间的名称。
完整代码:
private void ShowWindowByName(string name)
{
Form f = (Form)Activator.CreateInstance(Type.GetType(name));
f.Visible = true;
f.Show();
}
调用:
ShowWindowByName(this.GetType().Namespace+"."+"Form1");
ShowWindowByName(this.GetType().Namespace+"."+"Form2");
......

针对你的补充:
是呀,还是按照以往的方式,在Form1,Form2...上添加控件和事件处理方法。反射的意思是,根据现有的已经制作好的窗体的名字,在运行时动态地创建它的实例,然后Show出来。你可以试试看,先做一个Form1窗体,放上按钮什么的,然后再做FormMain窗体,添加一个按钮,然后在添加Click事件的处理方法,在这方法之中,加入上面的代码。