已经设计好了若干窗体,窗体名为form1,form2,现在想用一个函数OpenForm(formname),只要传递窗体名,打开这些窗体。该怎么写啊。

解决方案 »

  1.   

    笨方法:
    OpenForm(formname)
    {
      switch(formaname)
      {
        case "from1":
                     new...
                     break;
        case "from2":
                     new...
                     break;
       }
    }这样可以么?
      

  2.   

    我是想给菜单项的tag赋值窗体的name,然后点击菜单项获取tag,打开相应窗体
      

  3.   

    menuStrip1.Items[i].Tag = new YourForm();
    仅供参考
      

  4.   


    OpenForm(formname)
    {
       assembly = Assembly.GetExecutingAssembly();
       Type type = assembly.GetType(Item.tag.ToString(), true);
       if (type.IsSubclassOf(typeof(Form)))
       {
            Form o = (Form)assembly.CreateInstance(type.FullName);
            o.Show();
       }
    } 要求tag的值为窗体的FullName,命名空间限定
      

  5.   


    Assembly assembly;
     public Form1()
     {
         InitializeComponent();
         assembly = Assembly.GetExecutingAssembly();
         foreach (Type item in assembly.GetTypes())
          {
              if (item.IsSubclassOf(typeof(Form)))
          }
     }
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
     {
         if (listBox1.SelectedIndex > -1)
         {        Type type = assembly.GetType(listBox1.SelectedItem.ToString(), true);
            if (type.IsSubclassOf(typeof(Form)))
            {
                 Form o = (Form)assembly.CreateInstance(type.FullName);
                 o.Show();
            }
          }
      }
    俺测试的代码
      

  6.   

    #region 点击菜单项显示窗体
            /// <summary>
            /// 点击菜单项显示窗体
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void CreateForm(string formName)
            {
                Assembly assembly = Assembly.GetExecutingAssembly();
                Type type = assembly.GetType(formName, true);
                if (type.IsSubclassOf(typeof(Form)))
                {
                    Form o = (Form)assembly.CreateInstance(type.FullName);
                    o.Show();
                }
            }
            #endregion
    form的name为frmTest,我调用CreateForm("frmText");在Type type = assembly.GetType(formName, true);出错了,