我正在使用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。有关如何实现此功能的任何建议吗?
答案 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}}事件时,指向了哪个项目以及按下了哪个键。