2016-01-13 123 views
1

我創建了用戶右鍵單擊時出現的上下文菜單。我無法弄清楚如何調用一個窗體,當其中一個菜單項被點擊。看到我的代碼如下。將點擊事件添加到菜單項

if (e.Button == MouseButtons.Right) 
{ 
    ContextMenu m = new ContextMenu(); 
    m.MenuItems.Add(new MenuItem("New")); 
    m.MenuItems.Add(new MenuItem("-")); 
    m.MenuItems.Add(new MenuItem("Old")); 
    m.MenuItems.Add(new MenuItem("Lost")); 
    m.MenuItems.Add(new MenuItem("-")); 
    m.MenuItems.Add(new MenuItem("Found")); 

    switch(m.Name) 
    { 
     case "New": 
      new FrmInfo().ShowDialog(); 
      break; 
    } 
+0

我找不到'ContextMenu'類型,但是你不能做類似'm.MenuItems [「New」]的事情。OnClick + = OnClick;'? –

+0

爲什麼不使用'ContextMenuStrip'? –

回答

5

您可以使用MenuItem(String, EventHandler)構造,它需要OnClick事件處理程序的第二個參數。

所以,你的代碼可能看起來像

m.MenuItems.Add(new MenuItem("New", MenuItemNew_Click)); 

... 

private void MenuItemNew_Click(Object sender, System.EventArgs e) 
{ 
    new FrmInfo().ShowDialog(); 
} 
+0

你會如何在該上下文中添加子菜單項? –

+0

@HeseinBurg與往常一樣的方式:在將其添加到'm.MenuItems'之前,只填充新的menuitem'MenuItems'集合 –

0

你可以做這樣的事情:

 ContextMenu menuContainer = new ContextMenu(); 
     var menuItem = new MenuItem("New"); 
     menuItem.Click += Menu_Click; 
     menuContainer.Items.Add(menuItem);  

而且該事件將被定義爲:

void Menu_Click(object sender, RoutedEventArgs e) 
{ 
    //here comes your code 
} 
1

「新」 是MenuItem的Text屬性,而不是ContextMenu。

MenuItems還具有事件處理程序,因此您可以在單擊特定菜單項時運行一些代碼。