cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 2010
-
8 févr. 2006 à 18:28
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 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);
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.
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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);