C# 在ContextMenuStrip中悬停时禁用自动子菜单显示

C# 在ContextMenuStrip中悬停时禁用自动子菜单显示,c#,winforms,visual-studio-2012,contextmenustrip,C#,Winforms,Visual Studio 2012,Contextmenustrip,如果我有一个带有子菜单项的上下文菜单,当我仅将鼠标悬停在主菜单项上时,是否可以阻止子菜单弹出/显示?如果是,怎么做 每个ToolStripDropDownItem都有一个名为DropDown(类型为ToolStripDropDown)的属性,该属性表示鼠标悬停在项目上时将显示的下拉列表。ToolStripDropDown有一个名为Opening的事件,允许您轻松取消下拉列表。使用以下代码,可以在表单构造函数中设置所有内容: //Suppose the item you want to suppr

如果我有一个带有子菜单项的上下文菜单,当我仅将鼠标悬停在主菜单项上时,是否可以阻止子菜单弹出/显示?如果是,怎么做


每个
ToolStripDropDownItem
都有一个名为
DropDown
(类型为
ToolStripDropDown
)的属性,该属性表示鼠标悬停在项目上时将显示的下拉列表。
ToolStripDropDown
有一个名为
Opening
的事件,允许您轻松取消下拉列表。使用以下代码,可以在表单构造函数中设置所有内容:

//Suppose the item you want to suppress automatically showing 
//the drop down is item1
bool clicked = false;
item1.DropDown.Opening += (s,e) => {
  e.Cancel = !clicked;
  clicked = false;
};
item1.Click += (s,e) => {
  clicked = true;
  item1.ShowDropDown();
};
//The code above disables the automatic dropping-down 
//and shows the drop down by clicking on the item1.

非常好用,谢谢!我注意到一些我以前从未见过的语法。我是c#的新手。我想这是重写方法c#的一种方法?我将通过谷歌搜索了解更多信息。@MrVimes我使用的语法称为
lambda expression
,它只是一种方便的方法,可以轻松地构建
委托
,该代码仅用于注册
打开
单击
事件处理程序。它不是重写,要重写,您必须创建一些从基类继承的类,并重写其中的基类方法。