关闭MenuStrip的编程方法

4

我有一个MenuStrip添加到了一个窗体上,在其中一个下拉菜单中,我有一个文本框。当我在文本框上按下Enter键时,我希望运行一个函数,然后关闭下拉菜单。我知道如何完成Enter部分,但我不知道如何关闭MenuStrip下拉菜单。


请不要将标签(C#)放入标题中,而是将它们放在标签中。 - John Saunders
抱歉,不会再发生了。 - Nilbert
3个回答

10

调用Owner的Hide()方法。例如:

    private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == Keys.Enter) {
            e.SuppressKeyPress = true;
            toolStripTextBox1.Owner.Hide();
        }
    }

如果它是另一个菜单的子菜单呢?我如何沿着子菜单链向上返回到菜单的根节点?我尝试了 Owner.Owner,但那是未定义的,而 Owner.Parent 会导致“未设置父级”的异常。 - Nilbert
只需调用HideDropDown()方法,即可隐藏您想要隐藏的特定菜单项。 - Hans Passant

3
你可以尝试这个方法(对我有效): for(int x = 0; x < menu.Items.Count; x++) ((System.Windows.Forms.ToolStripDropDownItem)menu.Items[x]).HideDropDown(); 该代码可以隐藏菜单的下拉列表。

1

这是一个旧问题,但我遇到了同样的问题并找到了解决方法,所以为其他人提供帮助:

无论你的文本框(或其他控件)嵌套多深,都需要调用主菜单项的HideDropDown()方法。

例如,假设你有一个工具栏,其中包括文件编辑帮助。在编辑菜单中,你有一个嵌套在某个地方的文本框:

编辑菜单项 -> 查找菜单项 -> 在这里搜索文本框

你需要在文本框的keydown事件中调用编辑菜单的HideDropDown()方法:

EditMenuItem.HideDropDown();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接