ToolStripMenuItem和KeyPress或KeyDown事件
本文关键字:KeyDown 事件 KeyPress ToolStripMenuItem | 更新日期: 2023-09-27 18:14:35
我使用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
事件。
我正在使用Visual Studio 2010和。net 4.0。对如何实现这个功能有什么建议吗?
您可以使用菜单的DropDown
元素,然后将KeyDown
事件绑定到它。现在您知道按下了菜单上的哪个键,但不知道鼠标光标指向了哪个菜单项。绑定ToolStripMenuItem
的MouseEnter
事件,现在可以存储指向的事件。现在您知道当DropDown
的KeyDown
事件被触发时,指向了哪个项目,按了哪个键。
当您单击单独的删除按钮时,听起来好像您想从下拉列表中删除选中的项。这就是你想要做的吗?如果是这样,那么您需要查看delete按钮的click事件,并根据当前选中的项删除列表项。
封闭的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实例调用的静态方法。当然,在这种情况下,您可以将((ToolStrip)s)替换为toolStripDropDownButton1。