2011-12-15 95 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 
} 

但(驚奇,驚喜)它沒有工作。

我想我可能需要爲每個項目設置事件處理程序,但我不確定如何執行此操作,因爲我使用代碼創建了ContextMenuStrip

+0

可能重複[如何使一個項目的ContextMenuStrip click事件(http://stackoverflow.com/questions/5789023/how-to-make-a- contextmenustrip-item-click-event) – 2011-12-15 12:21:47

回答

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。我個人喜歡使用`ItemClicked`事件,特別是當每個條目的代碼很短時(~5行)。這樣,我可以在一個子程序中處理多個項目。 – 2011-12-15 12:23:40