2010-12-31 22 views
10

Come posso determinare il genitore di un oggetto ToolStripMenuItem? Con un normale MenuStrip tutto ciò che devi fare è usare la proprietà Parent, ma non sembra che ToolStripMenuItem abbia quella proprietà. Ho un ToolStripDropDownButton che ha un paio di ToolStripMenuItems e mi piacerebbe essere in grado di individuare il genitore di quelli programmaticamente.C# - Ottieni padre di ToolStripMenuItem

+0

possibile duplicato di [C# - Convertire il codice MenuStrip in ToolStrip] (http://stackoverflow.com/questions/4572381/c-convert-menustrip-code-to-strips) –

+0

C'è un ['Proprietario'] (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) e ['Parent'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent.aspx) proprietà esposte dalla classe ['ToolStripMenuItem'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.aspx). Do * none * di questi lavori per te? È difficile capire cosa stai cercando di realizzare e perché non funziona. –

+0

@Hans, non è un duplicato ma piuttosto una domanda più precisa per arrivare alla radice del problema. E quella domanda non mi ha portato da nessuna parte, anche tu hai provato a rispondere senza successo e poi hai cancellato la tua risposta. – user

risposta

13

Prova la proprietà OwnerItem.

+5

Come commentato contro la domanda ... questo funziona solo per i menu costruiti come una singola unità. Impostando la proprietà DropDown su un altro ContextMenu "si interrompe" la gerarchia, ad esempio, è possibile solo raggiungere il ContextMenu impostato. – AndrewD

3

Prova questo .....

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

Ecco ciò che si cerca

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

questo funziona per me:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

ToolStrip toolStrip = menuItem.GetCurrentParent(); 

... Da questo, si può escogitare un metodo per portarti da un ToolStripMenuItem casuale al livello più alto come:

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