C#通過反射打開相應窗體方法


C#單擊菜單欄或工具欄時通過反射打開窗體的方法,可以以取代長長的if-else或switch-case語句。要點:將菜單或工具欄項的名稱設置為與相應窗體名稱相同(關鍵)。

private void MenuItem_Click(object sender, EventArgs e)
{
   ToolStripMenuItem menuItem = (ToolStripMenuItem)sender;
   Form form = (Form)Assembly.Load(“您的程序集名稱”).CreateInstance(“窗體命名空間. “+ menuItem.Name); //注意: 窗體命  名空間后面一定要加一個點
   form.MdiParent = this; //如果是Mdi窗體的話請加這一行
   form.Show();
}

如果我們的一個窗體里有N個窗體,或者是有一Tree需要對應的調用N個窗體話,如果使用IF ELse方法可能會很麻煩,一般可能我會們這樣寫 

private void button3_Click(object sender, EventArgs e)
    {
      //獲取單擊的Button名稱
      string btnname = ((Button)sender).Name;
      if (btnname == "button1")
      {
        //處理窗體
      }
      else if (btnname == "button2")
      {
        //處理窗體
      }
      else
      {
        //處理窗體
      }
    }

這樣也不是不可 行,但是如果100多個上千個就不行了, 可以說超過10個就不好玩了,但是如果使用反射就很方便 ,只需要幾行代碼就可以的, 
看下面的方法吧

/// <summary> 
    /// 打開新的子窗體 
    /// </summary> 
    /// <param name="strName">窗體的類名</param> 
    /// <param name="AssemblyName">窗體所在類庫的名稱</param>  
    public static void CreateForm(string strName, string AssemblyName)
    {
      string path = AssemblyName;//項目的Assembly選項名稱 
      string name = strName; //類的名字 
      Form doc = (Form)Assembly.Load(path).CreateInstance(name);
      doc.Show();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
      //獲取單擊的Button名稱
      string btnname = ((Button)sender).Text;
      CreateForm("WindowsFormsApplication1." + btnname, "WindowsFormsApplication1");
    }

有了上面的方法,只要我們的用戶控件Text和窗體的類名一樣就可能實現動態加載了,當然如果有的同志說我的Text要用漢字怎么辦,那就再換個屬性啊,比如Name或者是其他屬性都可以。總之肯定比你一個一個的去寫要方便很多

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM