2

朝!

私は現在、多くのメニュー項目を持つ新しいソフトウェアを作成しています。現時点では、埋め込み XML で定義されたメニュー構造と、各項目のアクセス許可があり、メニューは正しく描画されます。

各メニュー項目を、それが選択されたときに実行されるメソッドにリンクするための最良のアプローチについて、いくつかの提案を求めています。ちょうど今、各メニュー項目には一意の ID があるので、すべてのメニュー項目で 1 つのメソッドを呼び出し、そのメソッドがそのメニュー項目の特定のメソッドを呼び出すようにすると思っていましたが、もっと良い方法があるかどうか疑問に思っています。これ。

また、文字列に格納されたメソッド名を使用してメソッドを呼び出す最良の方法は何ですか? 「MenuOption_xxx」というメソッドがあります。xxx は ID ですが、メニュー項目が選択されたときにそのメソッドを呼び出す必要があります。

任意のポインタまたはより良い提案をいただければ幸いです、乾杯。

4

2 に答える 2

1

を使用してみてくださいReflection。たとえば、オブジェクト メソッドを名前で呼び出します。

Type yourType= yourObject.GetType();
MethodInfo theMethod = thisType.GetMethod("MenuOption_xxx"); 
theMethod.Invoke(this, null); 

メニューTagプロパティを識別子として設定できます。

menuItem1.Tag = "X"; // name or id of this menuitem
menuItem2.Tag = "XX";
menuItem3.Tag = "XXX";

次にClickイベントを設定します。

menuItem1.Click += MenuItem_Click;
menuItem2.Click += MenuItem_Click;
menuItem3.Click += MenuItem_Click;

Clickイベント について:

private void MenuItem_Click(object sender, EventArgs e)
{
    var id = (String) ((MenuItem))sender.Tag;

    // use reflection:
    Type yourType= yourObject.GetType();
    MethodInfo theMethod = thisType.GetMethod(String.Format("MenuOption_{0}", id)); 
    theMethod.Invoke(this, null);
}

public void MenuOption_X
{
 ...
}
public void MenuOption_XX
{
 ...
}
于 2012-10-09T08:03:04.943 に答える