TreeView + ContextMenu [Résolu]

Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
- - Dernière réponse : cs_emmanuel9
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
- 9 févr. 2006 à 09:46
Bonjour à tous,

J'ai un Treeview avec un contextMenu et je voudrais que quand on clique avec le bouton gauche de la souris sur un TreeNode le contextMenu apparaissent et que le menu à l'interieur se mette enabled ou disabled suivant si le node séléctionné est coché ou non, donc j'ai fais dans l'évenement MouseUp :

if (e.Button == MouseButtons.Right)
{
t.SelectedNode = t.GetNodeAt(e.X, e.Y);

if ((t.SelectedNode.Checked))
menu_ouvrir->Enabled = true ;
else
menu_ouvrir->Enabled= false ;
}

Ben donc ca marche.... mais à moitié. Si je suis sur un node coché et que je clique avec le bouton droit de la souris sur un autre node qui est décoché celui là; le menu ouvrir est Enabled il faut que je rereclique avec le bouton droit de la souris sur ce même node pour que le menu_ouvrir se mette enfin en Disabled. On dirait que t.SelectedNode = t.GetNodeAt(e.X, e.Y); ne se produit pas quand je clique avec le bouton droit de la souris sur un node.

Quelqun serait t'il pourquoi ?

Par avance, merci.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
3
Merci
Salut,

C'est normal : le menu est affiché avant que l'event MouseUp soit levé, donc l'affichage du changement est toujours décalé d'un clic.
La solution est de ne pas associer le menu au contrôle mais de gérer toi même son affichage.
Sinon n'oublie pas de tester la nullité de t.SelectedNode, GetNodeAt peut très bien retourner null si tu clique ailleurs que sur un noeud.

if (e.Button == MouseButtons.Right)
{
Point pt = new Point(e.X, e.Y);
t.SelectedNode = t.GetNodeAt(pt);


if (t.SelectedNode != null && t.SelectedNode.Checked)
menu_ouvrir.Enabled = true;
else
menu_ouvrir.Enabled = false;


menu.Show(t, pt);
}

/*
coq
MVP Visual C#
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 139 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
0
Merci
ben justement j'avais des "null references exceptions", maintenant je sais pourquoi , merci de ta réponse.
Commenter la réponse de cs_emmanuel9

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.