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事件的处理方法,在这方法之中,加入上面的代码。
如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话看情况,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象)来调用。如
class A{
public static void a(){}
public void b(){}
}
public class B{
public static void main(String[] args){
A.a()//静态
new A().b()//非静态
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)