国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 01:50:55
字體:
來源:轉載
供稿:網友

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或者是其他屬性都可以。總之肯定比你一個一個的去寫要方便很多

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐昌市| 依兰县| 宁强县| 泰来县| 聊城市| 黄山市| 东明县| 西乌珠穆沁旗| 河池市| 璧山县| 三门县| 武山县| 甘孜县| 衡东县| 盐山县| 湖州市| 石首市| 毕节市| 井研县| 武功县| 丁青县| 高尔夫| 枞阳县| 长丰县| 恭城| 宜宾市| 海伦市| 紫金县| 启东市| 玉龙| 巢湖市| 璧山县| 观塘区| 中江县| 娱乐| 延吉市| 盖州市| 平陆县| 龙泉市| 灵台县| 泰安市|