鼠标离开容器时关闭Winform MenuStrip

时间:2013-03-02 04:30:14

标签: c# winforms menu menuitem mouseleave

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

enter image description here

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

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

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

我尝试使用父项的MouseLeave事件(“Clientes”等),并且确实:

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

这很有效,但显然,当鼠标离开menuitem“Clientes”时,它会关闭父级和容器。我需要一种方法来知道鼠标是在父菜单上还是在其中一个孩子上面,以便在我知道鼠标在其他地方时将其关闭。

希望有人可以帮助我。

1 个答案:

答案 0 :(得分: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();
}