将Click事件添加到菜单项

时间:2016-01-13 15:37:04

标签: c# .net winforms

我创建了一个在用户右键单击时显示的上下文菜单。我无法弄清楚如何在单击其中一个菜单项时调用表单。请参阅下面的代码。

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;
    }

5 个答案:

答案 0 :(得分:7)

您可以使用MenuItem(String, EventHandler)构造函数,它将OnClick事件处理程序作为第二个参数。

所以你的代码看起来像

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

...

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

答案 1 :(得分:1)

"新"是MenuItem的Text属性,而不是ContextMenu。

MenuItems还有事件处理程序,因此您可以在单击特定菜单项时运行一些代码。

答案 2 :(得分: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
}

答案 3 :(得分:0)

从 ICommand 继承项目数据:

public class EscalateData : System.Windows.Input.ICommand
    {
        ITV.Misc.Msg m_react = null;
        public void Execute(object parameter)
        {
            MessageBox.Show("Hello world!");
        }
        public event EventHandler CanExecuteChanged;
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public override string ToString()
        {
            return "Menu item";
        }

然后填写上下文菜单:

ContextMenu GenerateContextMenu()
{
    var ContextMenu = new ContextMenu();
    
    var escalate = new MenuItem() { Header = "Main" };
    List<EscalateData> data = new List<EscalateData>();
    data.Add(new  EscalateData());
    data.Add(new  EscalateData());
    ContextMenu.Items.Add(escalate);
    escalate.ItemsSource = data;
    return ContextMenu;
}

答案 4 :(得分:0)

要将单击事件添加到菜单条上的菜单项,可以执行以下操作:

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    string itemText = e.ClickedItem.Text;


    switch (itemText)
    {
        case "menu name 1":
            //do stuff
            break;

        case "menu name 2":
            // do stuff
            break;
    }
}