C# ToolStripMenuItem和按键或向下键事件

C# ToolStripMenuItem和按键或向下键事件,c#,keypress,C#,Keypress,我正在使用ToolStripDropDownButton动态添加菜单项,如下所示: toolStripDropDownButton1.DropDownItems.Clear(); ToolStripMenuItem item1 = new ToolStripMenuItem("Item1"); toolStripDropDownButton1.DropDownItems.Add(item1); ToolStripMenuItem item2 = new ToolStripMenuItem("

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

toolStripDropDownButton1.DropDownItems.Clear();

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

ToolStripMenuItem item2 = new ToolStripMenuItem("Item2");
toolStripDropDownButton1.DropDownItems.Add(item2);
我想在按下delete键时删除选定的菜单项。但是
ToolStripMenuItem
没有
KeyPress
KeyDown
事件


我正在使用VisualStudio2010和.NET4.0。有关如何实现此功能的任何建议?

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

封闭的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;
            }
        }
    }
};
toolStripDropDownButton1.KeyDown+=(s,e)=>
{
if(e.KeyCode==Keys.Delete)
{
foreach(在((ToolStrip)s.Items.OfType()中的变量项)
{
如果(选定项)
{
((工具条)s)。项目。移除(项目);
打破
}
}
}
};
(此代码完全未经测试)


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

您可以使用菜单中的
下拉列表元素,然后将
按键事件绑定到它。

现在您知道菜单上按了哪个键,但不知道鼠标光标指向了哪个菜单项。绑定
ToolStripMenuItem
s的
MouseEnter
事件,您现在可以存储指向哪个事件。现在,您知道当触发
下拉菜单
按键事件时,哪个项目被指向,哪个键被按下。

您所说的“所选菜单项”是什么意思?是悬停菜单项吗?是的,悬停菜单项。谢谢。我没有任何删除按钮,只有下拉菜单项。我想在按delete键时删除所选项目。问题是ToolStripMenuItem没有按键或按键事件。有什么建议或解决方法吗?哦,我明白了。那么,不,你不能那样做。ToolStrip会吃掉所有键盘事件。唯一的方法是创建一个从原始ToolStrip控件派生的新ToolStrip控件,并添加所需的位。我会重新考虑你想要达到的目标。谢谢你的回复。如果不容易做到,我可能需要使用不同的方法。