显式阻止ContextMenuStrip加载C#

时间:2009-06-03 09:26:21

标签: c# user-controls mouseclick-event right-mouse-button

我要求在未设置特定标志时隐藏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的开放事件中更改它

3 个答案:

答案 0 :(得分:2)

当使用键盘上的上下文菜单键(或其所谓的内容)调用上下文菜单时,您的解决方案无论如何都会失败。您可以使用Opening事件取消打开上下文菜单。

答案 1 :(得分:1)

有一种解决方法。

让我们说菜单项A设置控制控件B上下文菜单的标志。

在A的点击事件中,设置b.ContextMenu = nothing以将其关闭,并将b.ContextMenu设置回上下文菜单控件以将其重新打开。

答案 2 :(得分:0)

在WinForms中还有Click事件 - 点击鼠标右键会被触发。

如果您使用的是WPF,则应该有MouseRightButtonDownMouseRightButtonUp个事件。

查看此MSDN page上的表格,其中列出了哪些控件会引发哪些点击事件。值得注意的是,Button,CheckBox,RichTextBox和RadioButton(以及其他一些)在右键单击时不会引发事件。