C#經由過程反射翻開響應窗體辦法分享。本站提示廣大學習愛好者:(C#經由過程反射翻開響應窗體辦法分享)文章只能為提供參考,不一定能成為您想要的結果。以下是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或許是其他屬性都可以。總之確定比你一個一個的去寫要便利許多
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。