这是一个使用Winforms的C#应用程序,开发计算机是Windows 7,生产环境是XP、Vista或7。
工具栏菜单项似乎没有“closing”事件,只有“closed”事件。熟悉“closing”事件的人将知道您可以设置“cancel”标志以防止控件关闭。
此外,当我尝试通过在其“click”事件或“closed”事件中从内部重新制作它可见来解决问题时,它不起作用。虽然这在短期内是可以容忍的解决方法,但对于生产来说不是一个好的解决方案。
如有建议或相关信息,请提供帮助。谢谢。
这是一个使用Winforms的C#应用程序,开发计算机是Windows 7,生产环境是XP、Vista或7。
工具栏菜单项似乎没有“closing”事件,只有“closed”事件。熟悉“closing”事件的人将知道您可以设置“cancel”标志以防止控件关闭。
此外,当我尝试通过在其“click”事件或“closed”事件中从内部重新制作它可见来解决问题时,它不起作用。虽然这在短期内是可以容忍的解决方法,但对于生产来说不是一个好的解决方案。
如有建议或相关信息,请提供帮助。谢谢。
我设置了父级DropDown菜单的AutoClose属性为“False”,以便在单击动态创建的ContextMenu子菜单时,它可以保持在屏幕上:
ParentMenu.DropDown.AutoClose = false;
其中 ParentMenu 是一个 ToolStripMenuItem
。
通过设置“取消”标志并使用 DropDown 的父级 ToolStripDropDownMenu
的 Closing 事件来实现这一目的是不可行的,因为它会导致其两个级别的父菜单中的显示/隐藏行为不一致,并在稍后通过代码隐藏时导致无法摆脱意外的视觉效果。它还似乎使动态创建的菜单的父菜单的某些事件不再触发,例如它的 MouseEnter
事件。
在这个过程中有趣的发现是,尽管 Visual Studio 2010 的智能感知列出了上下文菜单项的 DropDown
的 LostFocus
事件;但是,当将此事件添加到动态创建的菜单时,它不会被触发;这显然是一个已知的行为,如此处所述:
这是我最终使用的方法。使用此方法,下拉菜单的自动关闭仅在鼠标指针位于下拉控件上时被禁用。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;
}
}