2010-02-12 9 views
1

J'ai trouvé que tout en essayant de trouver la bande d'outils propriétaire d'un élément, ce n'était pas facile de simplement regarder le propriétaire de l'élément. Voici un pseudo code qui, je pense, devrait fonctionner. Quelqu'un peut-il voir des problèmes avec cela ou devrait-il fonctionner dans tous les cas?La bonne façon d'obtenir la tooltrip propriétaire d'un élément de tooltrip dans .net, winforms

(1) Est-ce que le type de l'article est.Owner une ToolStrip?

(2) Oui, Retour Item.Owner

(3) Non, article = Item.OwnerItem. Aller à (1).

ETA:

Je voudrais faire le test d'un test général. Donc, au lieu de tester ToolStrip, je devrais tester ToolStrip, MenuStrip, StatusStrip ou ContextMenuStrip. Qu'est-ce qui différencie les 4 mentionnés ci-dessus des autres contrôles dérivés ToolStrip tels que ToolStripDropDown, ToolStripDropDownMenu et ToolStripOverflow?

ETA2: Ignorer, carpe absolue!

Pour autant que je puisse dire, c'est quelque chose à voir avec Control.TopLevelControl. Les 3 contrôles ci-dessus qui ne peuvent pas être ajoutés à un formulaire retournent un TopLevelControl d'eux-mêmes. Les 4 contrôles valides ne retournent rien pour TopLevelControl, avant d'être ajoutés à un formulaire, puis le formulaire lui-même, après avoir été ajouté.

+0

Est-ce un ToolStripItem? La propriété Owner du ToolStripItem renvoie un ToolStrip. Est-ce que ça ne marche pas? –

+0

C'est un ToolStripMenuItem qui appartient à un ToolStripDropDownButton. Toutefois, lorsque vous ajoutez certains éléments, comme DropDownButton, il semble créer un élément ToolStripDropDownMenu invisible qui dérive de ToolStrip. C'est ce qui est retourné quand vous regardez le propriétaire. Le propriétaire du ToolStripDropDownMenu est rien. – Jules

Répondre

0

Essayez item.Parent au lieu de item.Owner.

+0

item.Parent ne renvoie rien. – Jules

4

Cela a fonctionné:

 ToolStrip owner = testToolStripMenuItem.Owner; 
     while (owner is ToolStripDropDownMenu) 
      owner = (owner as ToolStripDropDownMenu).OwnerItem.Owner; 
+0

Salut, merci pour cela. Pouvez-vous jeter un oeil à mon eta et voir comment cela pourrait fonctionner pour tout contrôle dérivé de tooltrip valide. À votre santé. – Jules

+0

Si vous utilisez un 'ContextMenuStrip' alors ce qui précède doit être modifié en' while (le propriétaire est ToolStripDropDownMenu &&! Owner est ContextMenuStrip) 'puisque' ContextMenuStrip' hérite de 'ToolStripDropDownMenu' – NiKiZe

1

Si vous gérez un événement de clic pour un menu déroulant élément de menu comme suit:

private void testItemToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    ToolStripDropDownItem item = sender as ToolStripDropDownItem; 
    ToolStripDropDown menu = item.DropDown; 
    ToolStripItem ownerItem = item.OwnerItem; 
    ToolStrip toolStrip = item.Owner; 
} 
+0

Bonjour, cela ne fonctionnera pas. Vous pouvez vous alimenter latéralement et avoir plusieurs menus ToolStripDropDown. Vous devez faire une boucle comme mon code pseudo ou mon exemple nobugz. – Jules

+0

Ah, je vois ce que vous dites pour les éléments de menu DropDown imbriqués. – Michael