1

当未设置特定标志时,我需要隐藏 contextmenustrip。由于我认为我们无法显式控制上下文菜单条的显示/隐藏,因此我决定将鼠标右键单击与上下文菜单条关联的控件。它是一个用户控件,所以我尝试处理它的 MouseClick 事件,在该事件中我检查是否设置了标志以及按钮是否为右键。然而令我惊讶的是,该事件不会在鼠标右键单击时触发,而是仅在左键单击时触发。

我有什么问题还是有任何解决方法?

检测到右键单击,问题标题和描述已更改

在做了更多研究之后,当我处理控件上的 Mouse_Down 事件时,我得到了右键触发。但是我仍然一无所知,因为如何明确阻止 ContextMenuStrip From Loading。另一个问题是,为什么 MouseClick 没有检测到右键单击?


当前的解决方法

注册事件处理程序

   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 的打开事件中更改它

4

3 回答 3

2

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

于 2009-06-03T09:32:57.710 回答
1

有一个解决方法。

假设菜单项 A 设置了控制控件 B 上的上下文菜单的标志。

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

于 2009-06-03T09:34:07.020 回答
0

在 WinForms 中还有一个Click事件——它会在鼠标右键单击时触发。

如果你使用的是 WPF,你应该有MouseRightButtonDownMouseRightButtonUp事件。

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

于 2009-06-03T09:35:17.160 回答