Je suis très nouveau pour .NET et j'ai dû écrire un programme dans lequel il y a un TreeView avec différents types de nœuds, chaque type de nœud a un ContextMenuStrip différent, donc je crée plusieurs sorte de ContextMenuStrip et assigner ensuite à un type différent de TreeNode. Maintenant, ma question est, lorsque l'utilisateur affiche un menu contextuel, comment puis-je trouver quel TreeNode était le nœud qui provoque ContextMenuStrip à montrer. J'essaie d'utiliser ContextMenuStrip.SourceControl
mais il retourne un TreeView et cela ne m'aide jamais, car je sais que ma source est TreeView Je veux savoir quel nœud de la vue! Maintenant devrais-je utiliser une sorte de test de réussite? et si oui, qu'en est-il de ContextMenu qui s'affiche à l'aide du clavier?Comment déterminer le contrôle qui cause ContextMenuStrip
Répondre
Vous pouvez utiliser la propriété Tag pour "lier" les nœuds source. Par exemple, dans le gestionnaire d'événements de chargement de votre formulaire:
private void Form1_Load(object sender, EventArgs e)
{
TreeNode rootNode = treeView1.Nodes[0];
rootNode.Nodes[0].ContextMenuStrip = contextMenuStrip1;
contextMenuStrip1.Tag = rootNode.Nodes[0];
rootNode.Nodes[1].ContextMenuStrip = contextMenuStrip2;
contextMenuStrip2.Tag = rootNode.Nodes[1];
}
Ensuite, vous pouvez lier tous les contrôles ContextMenuStrip gestionnaires d'événements Ouvert à une méthode, comme ci-dessous:
private void contextMenuStrip_Opened(object sender, EventArgs e)
{
ContextMenuStrip cms = sender as ContextMenuStrip;
TreeNode aNode = cms.Tag as TreeNode;
if (aNode != null)
{
MessageBox.Show(aNode.Text);
}
}
Il pourrait y avoir de meilleures façons de faire mais je pense que cela devrait être capable de résoudre votre problème.
Mise à jour 17/10/2012:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Tag = e.Node;
}
}
private void contextMenuStrip1_Opened(object sender, EventArgs e)
{
ContextMenuStrip cms = sender as ContextMenuStrip;
TreeNode aNode = cms.Tag as TreeNode;
if (aNode == null)
{
aNode = treeView1.SelectedNode;
}
MessageBox.Show(aNode.Text);
}
private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
ContextMenuStrip cms = sender as ContextMenuStrip;
cms.Tag = null;
}
De cette façon un selon votre code je devrais utiliser une douzaine de ContextMenuStrip pour une douzaine de noeuds !! Mais je n'ai que sur ContextMenuStrip par type de nœud et c'est la source du problème – BigBoss
Je ne vois pas où est la différence entre un et plusieurs contrôles ContextMenuStrip. Avec la même méthode qui utilise la propriété Tag, vous devez disposer d'un contrôle suffisant sur la source de l'événement. Ou peut-être que j'ai raté quelque chose. Si vous voulez montrer du code, je pourrais savoir où est le problème. –
Lorsque vous avez plusieurs ContextMenuStrip, vous pouvez définir la propriété 'Tag' pour chaque ContextMenuStrip à un nœud spécifique, mais sinon, vous avez juste un ContextMenuStrip pour de nombreux nœuds. Maintenant, comment devriez-vous mettre Tag au nœud approprié ?? – BigBoss
- 1. ContextMenuStrip on Contrôle utilisateur contenant Richtextbox C#
- 2. ContextMenuStrip
- 3. Problème Lors de l'affichage de ContextMenuStrip dans le contrôle XtraGridview
- 4. Afficher le ContextMenuStrip sur l'emplacement correct du contrôle ActiveX
- 5. Comment obtenez-vous le contrôle sur lequel vous avez cliqué pour ouvrir un ContextMenuStrip?
- 6. ContextmenuStrip Width
- 7. ContextMenuStrip sans dérober le focus
- 8. BindingCompleteState - obtenir le champ qui cause l'exception
- 9. Comment afficher ContextMenuStrip sur le formulaire C#?
- 10. Comment changer le nom de l'élément contextMenuStrip
- 11. Comment déterminer qui a émis le signal?
- 12. Comment déterminer la cause du jeune gc d'une application Java
- 13. Lambda qui cause AttributeError
- 14. comment déterminer la cause de restauration dans un cftransaction
- 15. à propos de contextmenustrip
- 16. ContextMenuStrip dessiné incorrectement au-dessus du contrôle spécifié
- 17. Comment déterminer ce qui appelle les restrictions de contrôle d'accès utilisateur?
- 18. Fuite de mémoire avec ContextMenuStrip
- 19. Comment contrôler quand un contextMenuStrip est affiché?
- 20. Comment déterminer quel contrôle a été touché?
- 21. Comment déterminer la visibilité d'un contrôle?
- 22. déterminer l'appelant de contrôle utilisateur
- 23. de comportement erratiques ContextMenuStrip
- 24. Déterminer la zone visible d'un contrôle
- 25. vb.net et ContextMenuStrip?
- 26. Supprimer .net ContextMenuStrip Padding
- 27. Comment déterminer le tableau qui contient le plus d'éléments?
- 28. Comment obtenir le contrôle qui est cliqué?
- 29. Designer et hérité ContextMenuStrip
- 30. Sélection multiple dans ContextMenuStrip
Pourriez-vous nous montrer un code –
double possible de [ContextMenuStrip.Owner null Propriété lors de la récupération De Nested ToolStripMenuItem] (http://stackoverflow.com/questions/ 12094528/contextmenustrip-owner-propriété-null-when-retrieving-from-nested-toolstripmenuit) –
Comment cela est-il lié à cette question ?? avez-vous déjà lu la question? Je veux trouver un noeud qui a provoqué l'instanciation du menu. Comment est-ce lié à trouver un menu de ses articles ???? – BigBoss