1. 程式人生 > 其它 >C# 掃描名稱空間,開啟對應名稱form

C# 掃描名稱空間,開啟對應名稱form

技術標籤:C#

C# 掃描名稱空間,開啟對應名稱form

string frmName = "FrmName";
Assembly assembly = Assembly.GetExecutingAssembly();
Type[] typeArr = assembly.GetTypes();
ConstructorInfo[] arr;
foreach (Type t in typeArr) {
    //Console.WriteLine(t.FullName);
    // 非靜態
    // 繼承自 "DevExpress.XtraEditors.XtraForm" 或者 "System.Windows.Forms"
    // 建構函式如果是私有呼叫GetInstance方法
    if (
        !t.Attributes.HasFlag(TypeAttributes.Abstract | TypeAttributes.Abstract) // 非靜態
        && (t.BaseType.FullName == "DevExpress.XtraEditors.XtraForm" || t.BaseType.FullName == "System.Windows.Forms.Form")
        ) {
        arr = ((ConstructorInfo[])(t as TypeInfo).DeclaredConstructors);
        if (arr.Length != 0) { // 建構函式
            if (arr[0].IsPrivate) { // 執行私有化構造方法
                Console.WriteLine("\tPrivate " + t.FullName);
                if (t.Name == frmName) {
                    //呼叫私有的建構函式,獲得例項化物件
                    Form frm = t.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0].Invoke(null) as Form;
                    frm.Show();
                }
            } else {
                Console.WriteLine("\t" + t.FullName);
                if (t.Name == frmName) {
                    Form frm = Activator.CreateInstance(t) as Form;
                    frm.Show();
                }
            }
        }
    }
}