0

menustrip に動的にアタッチされているフォームを開こうとしています。

ここに私のコードは次のとおりです。

フォームfrm;

string formName =((ToolStripMenuItem)sender).Text;
formName = Assembly.GetEntryAssembly().GetName().Name + "." + formName;

Type type = Type.GetType(formName);
frm = (Form)Activator.CreateInstance(type);           

frm.Show();

ここで問題です。nullタイプに値を取得しています。この仕事で私を助けてください。

4

2 に答える 2

0

完全修飾名がわからない場合は、アセンブリ内の型を反復処理して、目的の型を見つけることができます。

var q = from t in Assembly.GetExecutingAssembly().GetTypes()
        where t.IsClass && t.Name.Equals(formname) && t.IsSubclassOf(typeof(Form))
        select t;
于 2013-04-12T07:48:32.773 に答える
0

アセンブリ名 ( Assembly.GetEntryAssembly().GetName().Name) と名前空間を混同しています。

フォームの実際の完全修飾クラス名を見つける必要があります。名前空間がわかっている場合 (つまり、名前空間はすべてのフォームで常に同じです)、単純にハードコーディングできます。別の解決策は、リフレクションを使用して GetEntryAssemblyアセンブリ内のすべての型を列挙し、その型が指定された名前のフォームを表しているかどうかを確認することです。

于 2013-04-12T07:46:01.510 に答える