TreeView + ContextMenu

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 8 févr. 2006 à 18:28
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.

2 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 févr. 2006 à 18:58
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#
*/
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
9 févr. 2006 à 09:46
ben justement j'avais des "null references exceptions", maintenant je sais pourquoi , merci de ta réponse.
0
Rejoignez-nous