1

我正在研究代码编辑器(winforms),我只是想知道如何为 contextmenu 添加控件。而且我从一开始就不使用设计师。

现在我当前的右键单击事件代码是:

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 的列表中添加控件。

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

像这样的代码?

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

类似的东西,但它当然不会工作,因为 contextmenu 没有 .SelectedItems 功能。

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

4

3 回答 3

1

创建 MenuItem 时,首先在新的 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!");
    }
于 2013-05-14T09:49:40.177 回答
1

据我了解,您想处理点击菜单项?为此,您必须将事件处理程序添加到您的菜单项。

//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();
}
于 2013-05-14T09:50:52.600 回答
1

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

干得好 :

    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
        }
    }
于 2013-05-14T09:53:25.853 回答