C# Visual Studio中缺少ContextMenu.isOpen

C# Visual Studio中缺少ContextMenu.isOpen,c#,visual-studio,contextmenu,C#,Visual Studio,Contextmenu,正如您在下面看到的,当我用鼠标离开richTextBox1时,它应该是隐藏的。现在这很好,但当我右键单击并打开上下文菜单时,程序也会隐藏,这很好,因为它应该隐藏。但我不想这样,所以我找到了这个带有MSDN的页面,解释了如何使用它,但它在VisualStudio中不起作用 private void richTextBox1_MouseLeave(object sender, EventArgs e) { this.WindowState = FormWindowState

正如您在下面看到的,当我用鼠标离开richTextBox1时,它应该是隐藏的。现在这很好,但当我右键单击并打开上下文菜单时,程序也会隐藏,这很好,因为它应该隐藏。但我不想这样,所以我找到了这个带有MSDN的页面,解释了如何使用它,但它在VisualStudio中不起作用

 private void richTextBox1_MouseLeave(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
    }
如果有,我会这样做:

private void richTextBox1_MouseLeave(object sender, EventArgs e)
    {
        if(!richTextBox1.ContextMenu.isOpen()){
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
        }
    }
我是否误解了如何使用该函数,或者Microsoft记录不存在的函数是正常的


你能帮我让它工作或做类似的事情吗?

Winforms
ContextMenu
没有
isOpen
属性。您可以订阅其
弹出窗口
折叠
事件,并使用专用变量保存ContextMenu状态。大概是这样的:

private void richTextBox1_MouseLeave(object sender, EventArgs e)
{
    if(!this.isContextMenuOpen){
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
    }
}
首先,我们声明一个布尔变量:

private bool isContextMenuOpen;
然后,在表单的构造函数中(或将
ContextMenu
添加到
RichTextBox
之后),我们订阅事件:

public Form1()
{
    InitializeComponent();
    //Popup event is raised when the contextmenu is shown
    this.richTextBox1.ContextMenu.Popup += ContextMenu_Popup;
    //Collapse event is raised when the contextmenu is hiding
    this.richTextBox1.ContextMenu.Collapse += ContextMenu_Collapse;
}
事件处理程序:

private void ContextMenu_Collapse(object sender, EventArgs e)
{
    this.isContextMenuOpen = false;
}

private void ContextMenu_Popup(object sender, EventArgs e)
{
    this.isContextMenuOpen = true;
}
那么,您的代码应该是这样的:

private void richTextBox1_MouseLeave(object sender, EventArgs e)
{
    if(!this.isContextMenuOpen){
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
    }
}

缺少引用。。。尝试检查引用是否丢失。
ContextMenu.isOpen()
用于WPF ContextMenu。你是在为winforms还是WPF编码?我怎样才能找到引用,MSDN说它是。我甚至可以使用contextmenues来加载它。命名空间:System.Windows.Controls Assembly:PresentationFramework(在PresentationFramework.dll中)我正在为winforms编码。你怎么看它是为WPF编码的?因为
PresentationFramework
是WPF的一个程序集,winforms控件使用
System.Windows.Forms
,而不是
System.Windows.Controls
。回答您的问题,不,Microsoft不会记录不存在的功能谢谢。我试试看能不能把它开起来。我必须学习如何创建扩展方法或它的名称。但无论如何,我需要学会这一点。一旦我把它修好一点,我会再打给你的。这个效果很好。当我将鼠标移到ContextMenu上时,窗口不会关闭。唯一的问题是,当我关闭ContextMenu时,无论我的鼠标在哪里,窗口都会最小化。稍后进行一些修改,它现在就可以工作了。谢谢你的帮助。谢谢你教了我很多关于C#如何工作的知识。很高兴这有帮助。这就是我们在这里帮助他人的原因:)