阻止ToolStripMenuItem上下文菜单关闭
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻止ToolStripMenuItem上下文菜单关闭相关的知识,希望对你有一定的参考价值。
我试图让我的上下文菜单保持在屏幕上,即使我点击其中一个下拉项目(当按下shift键时,虽然我不认为这对问题很重要)。当您单击开始>所有程序>附件> [现在点击您的shift键]并单击Windows资源管理器时,您可以看到Windows XP中的行为示例...菜单保持不变。
它是一个C#应用程序,使用Winforms,开发机器是Windows 7,生产是XP,Vista或7。
toolstripmenuitem似乎没有closing
事件;只有一个closed
。那些熟悉closing
事件的人会知道你可以设置一个cancel
标志来阻止控件关闭。
此外,当我尝试从click
事件或其closed
事件中重新显示它的变通方法时,它不起作用。虽然这本来就是一种可以容忍的解决方法,但它不适用于生产。
任何建议或相关信息非常感谢。
谢谢
通过将其Parent DropDown菜单的AutoClose属性设置为“False”,我可以通过动态创建我的ContextMenu子菜单停留在屏幕上,如下所示:
ParentMenu.DropDown.AutoClose = false;
其中ParentMenu是ToolStripMenuItem
。
使用DropDown的父ToolStripDropDownMenu
的Closing事件通过设置“取消”标志来实现这一点并不是一个可行的解决方案,因为它在其2个级别的Parent菜单中导致不一致的显示/隐藏行为以及导致意外的视觉伪像在屏幕上,我以后通过代码隐藏时无法摆脱。它似乎也导致动态创建的菜单的父母不再触发某些事件,例如它的MouseEnter
事件。
在这次体验中有趣的发现是,虽然Visual Studio 2010的intellisense为上下文菜单项的LostFocus
列出了DropDown
事件;将此事件添加到动态创建的菜单时,它不会被触发;这显然是一个已知的行为,如提到here:
这就是我最终使用的内容。使用此方法,仅当鼠标指针位于下拉控件上时,才会禁用下拉列表的自动关闭。 MyMenuItem
是ToolStripMenuItem
型。
AddHandler MyMenuItem.DropDown.MouseEnter, AddressOf DisableDropMenuClose
AddHandler MyMenuItem.DropDown.MouseLeave, AddressOf EnableDropMenuClose
Private Sub DisableDropMenuClose(ByVal sender As System.Object, ByVal e As System.EventArgs)
CType(sender, ToolStripDropDownMenu).AutoClose = False
End Sub
Private Sub EnableDropMenuClose(ByVal sender As System.Object, ByVal e As System.EventArgs)
CType(sender, ToolStripDropDownMenu).AutoClose = True
End Sub
ToolStripDropDownMenu具有Closing事件。
private void MyContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) {
if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked) {
e.Cancel = true;
}
}
以上是关于阻止ToolStripMenuItem上下文菜单关闭的主要内容,如果未能解决你的问题,请参考以下文章