2011-12-15 7 views
0

私はコードで作成ContextMenuStripを持っている:プログラミングのコンテキストメニュー

ContextMenuStrip menu; 
public Loader() 
{ 
    menu = new ContextMenuStrip(); 
    menu.Items.Add("Set Complete"); 
    menu.Items.Add("Set Review"); 
    menu.Items.Add("Set Missing"); 
} 

は、私は、特定の項目がクリックされたときに実行するコードを追加する必要があります。これまでのところ、私はこれを試してみました:

if (menu.Items[0].Selected) 
{ 
    //code 
} 

if (menu.Items[1].Selected) 
{ 
    //code 
} 

if (menu.Items[2].Selected) 
{ 
    //code 
} 

しかし、(驚き、驚き)それは仕事をdoesntの。

各アイテムのイベントハンドラを設定する必要があるかもしれないと思いますが、コードを使用してContextMenuStripを作成したので、これを行う方法がわかりません。

+0

可能重複[いるContextMenuStrip項目をクリックしてイベントを作成する方法](http://stackoverflow.com/questions/5789023/how-to-make-a- contextmenustrip-item-click-event) –

答えて

2

をあなたはクリックイベントをサブスクライブする必要があります。それが動作するはずですので、私はあなたのサンプルを変更した:

public Loader() 
{ 
    var menu = new ContextMenuStrip(); 
    var menuItem = menu.Items.Add("Set Complete"); 
    menuItem.Click += OnMenuItemSetCompleteClick; 
    menuItem = menu.Items.Add("Set Review"); 
    menuItem.Click += OnMenuItemSetReviewClick; 
    menuItem = menu.Items.Add("Set Missing"); 
    menuItem.Click += OnMenuItemSetMissingClick; 
} 

private void OnMenuItemSetCompleteClick(object sender, EventArgs e) 
{ 
    // Do something 
} 

private void OnMenuItemSetReviewClick(object sender, EventArgs e) 
{ 
    // Do something 
} 

private void OnMenuItemSetMissingClick(object sender, EventArgs e) 
{ 
    // Do something 
} 
2

個々のメニュー項目(Clickイベント)、またはContextMenuStrip自体(ItemClickedイベント)にイベントハンドラを追加する必要があります。

はこちらをご覧ください:How to respond to a ContextMenuStrip item click

+0

+1です。私は個人的には、特にアイテムのコードがかなり短い(〜5行)ときに、 'ItemClicked'イベントを使うのが好きです。こうして、私は1つのサブルーチンでいくつかの項目を処理します。 –

+0

はい、メニュー項目がいくつかの一般的なUIロジックを共有する場合、特に、 'ItemClicked'は本当に役に立ちます。 –

関連する問題