我如何添加控制动态上下文菜单(右键单击)



我正在编写代码编辑器(winforms),我只是想知道如何为contextmenu添加控件。我从一开始就没有使用designer。

现在我的右键事件的代码是:

private void rtb_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut"), new MenuItem("Copy"), new MenuItem("Paste") };
            ContextMenu rightcontext = new ContextMenu(menuItems);
            int xOffset = Cursor.Position.X - Dte.ActiveForm.Location.X;
            int yOffset = Cursor.Position.Y - Dte.ActiveForm.Location.Y;
            rightcontext.Show(Dte.ActiveForm, new Point(xOffset, yOffset));
        }
    }

现在已经工作了。但是问题是如何在contextmenu的list上添加控件。

特别是剪切,复制和粘贴。

像这样的代码?

if (rightcontext.menuItems.SelectedItems == "Cut")
{
    rtb.Cut()
}

类似的东西,但它当然不会工作,因为contextmenu没有。selecteditems函数。

所以我的问题是如何在这些列表上添加控制。请帮忙:/非常感谢!

据我所知,您想处理单击菜单项吗?要做到这一点,您必须在菜单项中添加事件处理程序。

//create menu items with cunstructor that takes 2 arguemtns (string, and event handler)
MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut", new System.EventHandler(this.CutMenuItemClick)), 
                                        new MenuItem("Copy", new System.EventHandler(this.CopyMenuItemClick)),
                                        new MenuItem("Paste", new System.EventHandler(this.PasteMenuItemClick)) };

,并像这样创建所有三个事件:

private void CutMenuItemClick(object sender, EventArgs e)
{
    rtb.Cut();
}

创建菜单项时,首先在新的MenuItem[]{}构造函数之外创建它们。然后对每个菜单项使用事件Click.

的例子:

    void SomeMethod()
    {
        MenuItem item = new MenuItem("Test");
        item.Click += item_Click;
        //Then your code..
        MenuItem[] menuItems = new MenuItem[] { item /*Etc...*/ };
    }
    void item_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Clicked!");
    }

为菜单项定义事件处理程序

给你:

    ContextMenu rightcontext;
    private void rtb_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut"), new MenuItem("Copy"), new MenuItem("Paste") };
            rightcontext = new ContextMenu(menuItems);
            rightcontext.MenuItems[0].Click += contextMenuItemClick;
            rightcontext.MenuItems[1].Click += contextMenuItemClick;
            rightcontext.MenuItems[2].Click += contextMenuItemClick;
            int xOffset = Cursor.Position.X - Dte.ActiveForm.Location.X;
            int yOffset = Cursor.Position.Y - Dte.ActiveForm.Location.Y;
            rightcontext.Show(Dte.ActiveForm, new Point(xOffset, yOffset));
        }
    }
    private void contextMenuItemClick(object sender, EventArgs e)
    {
        MenuItem m = (MenuItem)(sender);
        if (m.Text.ToLower() == "copy")
        {
            // Some Code
        }
    }

最新更新