C# 显示了如何查找上下文菜单,而不是如何处理单击事件

C# 显示了如何查找上下文菜单,而不是如何处理单击事件,c#,custom-controls,contextmenu,mouseevent,C#,Custom Controls,Contextmenu,Mouseevent,我有一个简短的问题 我正在开发一个自定义图表控件。图表控件允许用户绘制线条或放置任何矩形。此“开始绘制/放置”选项设置为控制鼠标下键、鼠标左键单击和鼠标右键单击,并设置为显示关联菜单 我的问题是,如果用户决定不选择任何内容并在显示上下文菜单时从上下文菜单中出来,他们应该左键单击控件,因为右键单击将再次显示菜单。但目前上下文菜单正在修改,其余的左键点击也被执行。如何验证上下文菜单是否显示在左键单击上,并且用户希望从上下文菜单中出来,而不是执行开始绘制/放置逻辑 其他信息: 我在C项目中工作,我试图

我有一个简短的问题

我正在开发一个自定义图表控件。图表控件允许用户绘制线条或放置任何矩形。此“开始绘制/放置”选项设置为控制鼠标下键、鼠标左键单击和鼠标右键单击,并设置为显示关联菜单

我的问题是,如果用户决定不选择任何内容并在显示上下文菜单时从上下文菜单中出来,他们应该左键单击控件,因为右键单击将再次显示菜单。但目前上下文菜单正在修改,其余的左键点击也被执行。如何验证上下文菜单是否显示在左键单击上,并且用户希望从上下文菜单中出来,而不是执行开始绘制/放置逻辑

其他信息: 我在C项目中工作,我试图捕获上下文菜单关闭事件,但它在控制鼠标按下事件之前触发并关闭自身,我无法验证上下文菜单是否在之前显示,以避免遍历鼠标左键按下事件逻辑的其余部分


提前感谢您的帮助。

这里有一个简单的解决方案

假设表单上有一个ListBox控件,它有一个关联的ContextMenu。现在,我们希望在每次单击控件时向其添加一个列表项:

    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString());
    }
现在在表单级别定义一个名为menuClosed的bool变量,如下所示:

现在像这样捕获上下文菜单的关闭事件并翻转标志:

    private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e)
    {
        menuClosed = true;
    }
现在更新将项添加到列表框控件的代码,如下所示:

    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (!menuClosed)
            listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString());
    }

当上下文菜单关闭时,我只是将bool变量设置为true,然后检查bool标志以查看是否应该将某个项添加到列表中。您可以使用这种相同的机制来确定是否应该执行特定的命令。

嗨,Nexus,我也尝试过同样的方法,但不幸的是,在点击上下文菜单时,在它点击点击click/mousedown事件之前关闭它。所以bool值在控件的click事件中总是返回true。这是我正在努力解决的问题。感谢您的帮助。在我看来,您已经在MouseDown事件中实现了图形控制鼠标操作。我提到的代码片段在这种情况下不起作用,因为mousedown适用于每次左/右单击。如果你不能在点击事件中移动这些代码块,那么我们必须想出一个更好的解决方案。如果我遇到任何问题,我会告诉你[:干杯,伙计::是的,我必须将代码保留在鼠标下。同时我尝试单击事件,还有一个单击实例将首先使上下文菜单消失,然后单击事件将执行。同一问题:
    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (!menuClosed)
            listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString());
    }