【问题标题】:Closing a MenuStrip programmatically以编程方式关闭 MenuStrip
【发布时间】:2010-05-24 05:22:04
【问题描述】:

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

【问题讨论】:

  • 请不要在标题中添加标签(C#)。将它们留在标签中。
  • 对不起,以后不会再发生了。

标签: c# windows forms menustrip


【解决方案1】:

调用所有者的 Hide() 方法。例如:

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

【讨论】:

  • 如果它是另一个菜单的子菜单怎么办?我如何沿着子菜单链向上到达菜单的最根?我试过 Owner.Owner 但这是未定义的,并且 Owner.Parent 导致“未设置父级”的异常。
  • 只需调用要隐藏的特定菜单项的 HideDropDown() 方法即可。
【解决方案2】:

你可以试试这个(对我有用)

for(int x = 0; x < menu.Items.Count; x++) ((System.Windows.Forms.ToolStripDropDownItem)menu.Items[x]).HideDropDown();

【讨论】:

    【解决方案3】:

    这是一个老问题,但我遇到了同样的问题并找到了解决方案,所以对于其他人来说:

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

    例如,假设您有一个带有FileEditHelp 的工具条。在Edit 菜单上,您的文本框嵌套在某处:

    编辑菜单项 -> 查找菜单项 -> 在此处搜索文本框

    您可以在文本框的 keydown 事件中调用 Edit 菜单的 HideDropDown() 方法:

    EditMenuItem.HideDropDown();
    

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2015-03-17
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多