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控件,并添加所需的位。我会重新考虑你想要达到的目标。谢谢你的回复。如果不容易做到,我可能需要使用不同的方法。