2013-03-02 261 views
0

我一直在整天处理这个问题。我有一个菜单条和几个菜单项。 每个项目,也有很多项目。现在,如果我点击父菜单项,一个容器(类似于contextmenu)保持打开,直到我点击其他地方。当鼠标离开容器时关闭Winform MenuStrip

enter image description here

在形象的例子,“Clientes”将是父项,并有其“容器”与他们的孩子的菜单项。

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

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

我试图用父母项目(“Clientes”等)MouseLeave事件,有没有:

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

这工作,但很明显,它关闭父,也是容器时,鼠标离开menuitem“Clientes”。我需要一种方法来了解鼠标是否位于父菜单项或其子项之上,以便在知道鼠标位于其他位置时关闭它。

希望有人能帮助我。

+0

你使用的是什么控件? 'MenuStrip'? – 2013-03-02 04:49:48

+0

@OscarMederos是的。那个。 – Andres 2013-03-02 05:06:07

回答

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(); 
} 
+0

谢谢你的回答。但我不太了解你的解决方案。正如你所说,picContainer将是我的矩形。我该如何创建?另外,我注意到当鼠标离开clientToolStripMenuItem时隐藏它,我需要的是当它离开容器的任何项目时隐藏/关闭。为了以防万一,我使用它的所有childs菜单项将容器调用到item的contentrectangle。希望你能多给我解释一下。再次感谢你! – Andres 2013-03-02 16:08:54

+0

在你的问题中,你说过“一个容器(类似于contextmenu)”。在图像中,这个容器有菜单项,比如“Nuevo cliente”等等。我的示例中的picContainer与此相当。其次,为什么当它离开集装箱的任何物品时,它会隐藏/关闭,它已经隐藏了。只有当鼠标移动到这个特定的Clientes菜单的区域时,才想显示它,对吗? – 2013-03-03 03:45:48

+0

是的,这就对了。感谢您的帮助,但我不需要一个答案了。我只是用另一种方式实现了菜单。 – Andres 2013-03-03 04:31:18