TreeView + ContextMenu [Résolu]

Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
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.

2 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
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#
*/
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ben justement j'avais des "null references exceptions", maintenant je sais pourquoi , merci de ta réponse.