ContextMenu.isOpen 在 Visual Studio 中缺失

ContextMenu.isOpen is missing in Visual Studio

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

中不起作用
 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;
        }
    }

是我误解了函数的使用方法,还是微软记录不存在的函数是正常的?

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

Winforms ContextMenu 没有 isOpen 属性。您可以做的是订阅它的 PopupCollapse 事件并使用私有变量来保存 ContextMenu 状态。像这样:

首先我们声明一个布尔变量:

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;
    }
}