一个窗体上有许多的button,每一个button的Text代表要打开窗体的名字,现在想写一个通用的函数,只要将button的Text传过去就可以打开相应的窗体,这个函数应该怎么实现?应该很简单吧?但我是菜鸟,C#的居然不会写,汗。请高手指教//有很多个这样的button,或者能否写一个通用的事件来处理?
 private void btn1_Click(object sender, EventArgs e)
        {
            showForm(this.btn1.Text);
        }
private void showForm(string FormName)
        {            //这个函数应该怎么写呢?
        
        }

解决方案 »

  1.   

    利用反射
    private void showForm(string FormName)
     {
                string namespace_str="TestCsdnWindows.";//注意加上窗体所在的命名空间
                string name =namespace_str + FormName;//
                Type t = Type.GetType(name, true);
                Form frm = (Form)Activator.CreateInstance(t);
                frm.Show();
    }
      

  2.   


    呵呵,这是有难度的问题
    假设你的button的text等于form的名字
    那么,
    用类的名字来创建一个实体,需要用到反射(Reflection)
    Dim arrObj() As Object   '用来传递类的构造函数的参数
    Dim TypeGet As Type=Type.GetType("Form的名字",False,True)
    Dim Form1 As Form = Activator.CreateInstance(TypeGet, arrObj)
    Form1.Show
      

  3.   

     
    Dim arrObj() As Object  '用来传递类的构造函数的参数 
    Dim TypeGet As Type=Type.GetType("Form的名字",False,True) 
    Dim Form1 As Form = Activator.CreateInstance(TypeGet, arrObj) 
    Form1.Show 
      

  4.   

    通过跟类名相同的字符串来实例化类的对象,在地球上貌似只有通过反射.
    如果不想用反射,而窗体上的button不是太多的话,就在方法里通过Switch case 来判断吧.
      

  5.   

    大神,程序运行时提示说:未能从程序集“Msg, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“Msg.Form1”。这是怎么回事?