我要求在未设置特定标志时隐藏contextmenustrip。因为我认为我们不能明确地控制上下文菜单条的显示/隐藏,所以我决定在与contextmenustrip相关联的控件上单击鼠标右键。它是一个UserControl,所以我尝试处理它的MouseClick事件,我在其中检查标志是否设置以及按钮是否是右键。令我惊讶的是,鼠标右键单击时不会触发该事件,但仅针对左键单击触发。
我有什么问题或是否有任何解决方法?
正确点击检测,问题标题和描述已更改
在做了一些更多的研究之后,当我在控件上处理Mouse_Down事件时,我得到了右键点击。但是仍然无能为力,因为如何明确阻止ContextMenuStrip加载。另一个问题是,为什么MouseClick没有检测到右键单击?
当前WorkAround
注册事件处理程序
userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown);
void Control1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right && flag == false)
{
userControl1.Control1.ContextMenuStrip = null;
}
else
{
userControl1.Control1.ContextMenuStrip = contextMenuStrip1;
}
}
这是我正在做的当前解决方法。 但是我怎样才能在ContextMenuStrip的开放事件中更改它
答案 0 :(得分:2)
当使用键盘上的上下文菜单键(或其所谓的内容)调用上下文菜单时,您的解决方案无论如何都会失败。您可以使用Opening
事件取消打开上下文菜单。
答案 1 :(得分:1)
有一种解决方法。
让我们说菜单项A设置控制控件B上下文菜单的标志。
在A的点击事件中,设置b.ContextMenu = nothing以将其关闭,并将b.ContextMenu设置回上下文菜单控件以将其重新打开。
答案 2 :(得分:0)
在WinForms中还有Click
事件 - 点击鼠标右键会被触发。
如果您使用的是WPF,则应该有MouseRightButtonDown
和MouseRightButtonUp
个事件。
查看此MSDN page上的表格,其中列出了哪些控件会引发哪些点击事件。值得注意的是,Button,CheckBox,RichTextBox和RadioButton(以及其他一些)在右键单击时不会引发事件。