【问题标题】:Closing Winform MenuStrip when mouse leaves the container鼠标离开容器时关闭 Winform MenuStrip
【发布时间】:2013-03-02 15:30:49
【问题描述】:

我整天都在处理这个问题。我有一个带有几个菜单项的菜单条。 每个项目,也有很多项目。现在,如果我单击父菜单项,一个容器(类似于 contextmenu)会保持打开状态,直到我单击其他位置。

在图像示例中,“Clientes”将是父项,而“容器”将是其子菜单项。

我想做的是在鼠标离开父项或容器区域时关闭该“容器”。我不想点击表单的任何其他部分来关闭它。当我这么说时,是因为我实际上正在使用 WPF 按钮,我需要这样做。

我在这里需要帮助,希望有人能给我一些建议。

我尝试使用父项(“Clientes”等)的 MouseLeave 事件,结果确实如此:

private void clientesToolStripMenuItem_MouseLeave(object sender, EventArgs e)
    {
        clientesToolStripMenuItem.DropDown.Close();
    }

这可行,但显然,当鼠标离开菜单项“Clientes”时,它会关闭父项和容器。我需要一种方法来知道鼠标是在父菜单项上还是在他们的一个子项上,以便在我知道鼠标在其他地方时关闭它。

希望有人能帮帮我。

【问题讨论】:

  • 你用的是什么控件? MenuStrip?
  • @OscarMederos 是的。那个。

标签: c# winforms menu menuitem mouseleave


【解决方案1】:

您可以通过处理clientesToolStripMenuItem 本身的事件来实现这一点。当鼠标进入您的客户主菜单矩形时,只需显示您的容器并在它离开此矩形时将其隐藏。假设 picContainer 是你的矩形,你可以这样做:

private void clientToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
    picContainer.Location = clientToolStripMenuItem.ContentRectangle.Location;
    picContainer.Show();
}

private void clientToolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
    this.picContainer.Hide();
}

【讨论】:

  • 感谢您的回答。但是我不太了解您的解决方案。正如你所说, picContainer 将是我的矩形。我怎样才能创造它?另外,我注意到你在鼠标离开 clientToolStripMenuItem 时隐藏它,我需要的是在它离开容器的任何项目时隐藏/关闭。以防万一,我将容器称为包含所有子菜单项的项目的内容矩形。希望你能多解释一下。再次感谢您!
  • 在你的问题中,你说的是“一个容器(类似于 contextmenu)”。在图像中,这个容器有诸如“Nuevo cliente”之类的菜单项,对吧?我的例子中的 picContainer 是等价的。其次,当它离开容器的任何物品时,你为什么要隐藏/关闭它已经隐藏了。您只想在鼠标移动到此特定客户端菜单区域时才显示它,对吗?
  • 是的,没错。感谢您尝试提供帮助,但我不再需要答案了。我只是用另一种方式实现了菜单。
猜你喜欢
  • 2017-08-05
  • 1970-01-01
  • 2016-02-20
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
相关资源
最近更新 更多