2010-12-31 15 views
10

Wie kann ich das übergeordnete Element eines ToolStripMenuItem ermitteln? Mit einem normalen MenuStrip müssen Sie nur die Parent-Eigenschaft verwenden, aber ToolStripMenuItem scheint diese Eigenschaft nicht zu haben. Ich habe einen ToolStripDropDownButton, der ein paar ToolStripMenuItems hat, und ich möchte in der Lage sein, die Eltern dieser Programme programmatisch zu lokalisieren.C# - Get Parent von ToolStripMenuItem

+0

mögliches Duplikat von [C# - Konvertieren von MenuStrip-Code zu ToolStrip] (http://StackOverflow.com/questions/4572381/c-convert-menustrip-code-to-toolstrip) –

+0

Es gibt einen ['Besitzer'] (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) und ['Parent '] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent.aspx) Eigenschaft, die von der [ToolStripMenuItem-Klasse] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.aspx) bereitgestellt wird. Funktionieren * keine * dieser für Sie? Es ist schwierig zu verstehen, was Sie erreichen möchten und warum es nicht funktioniert. –

+0

@Hans, es ist kein Duplikat, sondern eine genauere Frage, um an die Wurzel des Problems zu gelangen. Und diese Frage hat mich nirgendwohin geführt, auch du hast versucht, es ohne Erfolg zu beantworten und dann deine Antwort gelöscht. – user

Antwort

13

Versuchen Sie die OwnerItem Eigenschaft. diese

+5

Wie gegen die Frage kommentiert ... funktioniert dies nur für Menüs, die als eine Einheit konstruiert werden. Das Setzen der DropDown-Eigenschaft auf ein anderes ContextMenu "bricht" die Hierarchie, d.h. Sie können nur bis zum gesetzten ContextMenu gehen. – AndrewD

3

Versuchen .....

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

Hier ist, was Sie suchen mich

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

Dies funktioniert:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

ToolStrip toolStrip = menuItem.GetCurrentParent(); 

... von diesem, Sie kann eine Methode entwickeln, um Sie von einem zufälligen ToolStripMenuItem auf die oberste Ebene zu bringen:

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; 
    } 
} 
Verwandte Themen