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或許是其他屬性都可以。總之確定比你一個一個的去寫要便利許多
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。