1. 程式人生 > >C# 通過反射例項化窗體(窗體不固定或窗體數量多)

C# 通過反射例項化窗體(窗體不固定或窗體數量多)

private void button_Click(object sender, EventArgs e)
{
    //通過按鈕名稱開啟窗體

    string btnName = ((Button)sender).Tag.ToString();
    string name = Assembly.GetExecutingAssembly().GetName().Name; //獲取當前程式集名稱
    CreateForm(MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + btnName, name);
    //CreateForm(this.GetType().Namespace + "." + btnName, name);
    //StackTrace st = new StackTrace(true);
    //MethodBase mb = st.GetFrame(1).GetMethod();
    //Console.WriteLine(mb.DeclaringType.Namespace.ToString());
    //Type[] type = Assembly.GetExecutingAssembly().GetTypes(); //獲取當前所有程式集名稱
            
    //Console.WriteLine(name);
           
    //Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType.Namespace.ToString());
}
/// <summary>
/// 通過反射例項化窗體
/// </summary>
/// <param name="AssemblyName">根程式集名稱</param>
/// <param name="CurrentAssemblyName">當前要建立的窗體程式集名稱</param>
public void CreateForm(string CurrentAssemblyName, string AssemblyName)
{
    Form frm = (Form)Assembly.Load(AssemblyName).CreateInstance(CurrentAssemblyName);
    frm.Show();
}