2010-12-31 22 views
10

¿Cómo puedo determinar el elemento primario de un ToolStripMenuItem? Con un MenuStrip normal, todo lo que tiene que hacer es usar la propiedad Parent, pero no parece que ToolStripMenuItem tenga esa propiedad. Tengo un ToolStripDropDownButton que tiene un par de ToolStripMenuItems y me gustaría poder identificar el padre de esos programáticamente.C# - Obtiene el elemento primario de ToolStripMenuItem

+0

posible duplicado de [C# - Convertir código MenuStrip en ToolStrip] (http://stackoverflow.com/questions/4572381/c-convert-menustrip-code-to-toolstrip) –

+0

Hay un ['Dueño'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.owner.aspx), ['OwnerItem'] (http://msdn.microsoft.com/en-us/ library/system.windows.forms.toolstripitem.owneritem.aspx) y ['Parent'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent.aspx) propiedad expuesta por la clase ['ToolStripMenuItem'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.aspx). ¿* Ninguno * de estos trabajo para usted? Es difícil entender lo que intentas lograr y por qué no funciona. –

+0

@Hans, no es una pregunta duplicada, sino una más precisa para llegar a la raíz del problema. Y esa pregunta no me ha llevado a ninguna parte, incluso trataste de responderla sin éxito y luego borraste tu respuesta. – user

Respuesta

13

Pruebe la propiedad OwnerItem.

+5

Como se comentó en contra de la pregunta ... esto solo funciona para menús construidos como una sola unidad. Establecer la propiedad DropDown en otro ContextMenu "rompe" la jerarquía, es decir, solo puede caminar hasta el conjunto ContextMenu. – AndrewD

3

Prueba esto .....

ToolStripMenuItem t = (ToolStripMenuItem)sender; 
ContextMenuStrip s = (ContextMenuStrip)t.Owner; 
MessageBox.Show(s.SourceControl.Name); 
0

Esto es lo que busca

private void ContextMenuStrip_Opening(object sender, CancelEventArgs e) 
{ 
    contextMenuStrip1.Tag = ((ContextMenuStrip)sender).OwnerItem; 
} 
private void ToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem senderItem = (ToolStripMenuItem)sender; 
    var ownerItem = (ToolStripMenuItem)((ContextMenuStrip)senderItem.Owner).Tag; 
} 
5

Esto funciona para mí:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

ToolStrip toolStrip = menuItem.GetCurrentParent(); 

... de esto, puede diseñar un método para llevarlo desde un ToolStripMenuItem al azar al nivel más alto, como:

public static class ToolStripItemExtension 
{ 
    public static ContextMenuStrip GetContextMenuStrip(this ToolStripItem item) 
    { 
     ToolStripItem itemCheck = item;    

     while (!(itemCheck.GetCurrentParent() is ContextMenuStrip) && itemCheck.GetCurrentParent() is ToolStripDropDown) 
     { 
      itemCheck = (itemCheck.GetCurrentParent() as ToolStripDropDown).OwnerItem; 
     } 

     return itemCheck.GetCurrentParent() as ContextMenuStrip; 
    } 
} 
Cuestiones relacionadas