ToolStripMenuItem和KeyPress或KeyDown事件

时间:2011-11-14 08:39:33

标签: c# keypress

我正在使用ToolStripDropDownButton并动态添加菜单项,如下所示:

toolStripDropDownButton1.DropDownItems.Clear();

ToolStripMenuItem item1 = new ToolStripMenuItem("Item1");
toolStripDropDownButton1.DropDownItems.Add(item1);

ToolStripMenuItem item2 = new ToolStripMenuItem("Item2");
toolStripDropDownButton1.DropDownItems.Add(item2);

Delete 键时,我想删除所选的菜单项。但ToolStripMenuItem没有KeyPressKeyDown事件。

我正在使用Visual Studio 2010和.NET 4.0。有关如何实现此功能的任何建议吗?

3 个答案:

答案 0 :(得分:0)

当您单击单独的删除按钮时,听起来好像要从下拉列表中删除所选项目。这是你想要做的吗?如果是,那么您需要查看删除按钮的单击事件并根据当前所选项目删除列表项。 KeyDown的KeyPress是不需要的。

答案 1 :(得分:0)

封闭的ToolStrip获取关键事件,以便您可以使用以下内容处理它:

toolStripDropDownButton1.KeyDown += (s, e) =>
{
    if (e.KeyCode == Keys.Delete)
    {
        foreach (var item in ((ToolStrip)s).Items.OfType<ToolStripMenuItem>())
        {
            if (item.Selected)
            {
                ((ToolStrip)s).Items.Remove(item);
                break;
            }
        }
    }
};

(此代码完全未经测试)

我在事件处理程序中使用了((ToolStrip)s),以防你想在其他地方定义一个可由多个不同的ToolStrip实例调用的静态方法。当然,在这种情况下,你可以用 toolStripDropDownButton1 替换((ToolStrip)s)

答案 2 :(得分:0)

您可以使用菜单中的DropDown元素,然后将KeyDown事件绑定到该元素。 现在你知道在菜单上按下了哪个键,但是你不知道用鼠标光标指向了哪个菜单项。绑定MouseEnter的{​​{1}}事件,您现在可以存储指向的那个事件。现在您知道在触发ToolStripMenuItem的{​​{1}}事件时,指向了哪个项目以及按下了哪个键。