TreeView - Sélection avec clic droit

Signaler
Messages postés
224
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
24 juillet 2013
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour

j'aimerais savoir comment je peux faire pour sélectionner un noeud avec le clic droit pour un menu contextuelle?

J'ai trouvé des solutions mais pour VB.net... et je suis en VB6

Merci pour votre aide

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
66
Salut

L'évènement _NodeClick se déclenche bien sur un clic doit.
Il ne te reste plus qu'à savoir si c'est un clic droit ou gauche.
La difficulté, c'est que _NodeClock se déclenche lorsque le bouton vient d'être relâché, donc impossible de connaitre son état au moment de l'évènement.

Perso, voilà comment je ferai :
Dans Declarations de la page de code, j'ajouterai un variable qui mémorisera l'heure du dernier clic-droit (Up)
Private gRightMouseTimeStamp   As Single
Dans le TreeView1_MouseDown :
If (Button Or vbRightButton) = vbRightButton Then _
    gRightMouseTimeStamp = Timer
Et enfin, dans l'évènement _Click du TreeView :
    If (Timer - gRightMouseTimeStamp) <= 1! Then
        Debug.Print "Clic-droit. Twingo !"
    End If

L'inconvénient, c'est que si l'utilisateur reste plus d'une seconde sur le clic droit, cela ne fonctionnera pas.
A toi de faire des essais

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonsoir,

Autre solution : Simuler un click.
Pour cela :

'declaration
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4

Private bFlagClicArtificiel As Boolean


'gérer le click droit dans l' événement mousedown.
Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
'
    If Button = vbRightButton Then
        ' Positionne le Flag
        bFlagClicArtificiel = True
        ' Simule un Clic
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
        ' Donne windows la possibilité de traiter le Click
        DoEvents
        ' réinitialise le flag
        bFlagClicArtificiel = False
        ' affiche le menu contextuel
       '-> PopupMenu MonMenu
    End If

End Sub


Le click gauche lui, sera traiter dans l' événement TreeView_NodeClick.




[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Si par contre tu as un traitement dans l' événement Click,
ne pas oublier de tester avant sur l' état de bFlagClicArtificiel.

Private Sub TreeView1_Click()
    ' pas de traitement sur le Click s'il est appelé
    ' par le MouseDown du Bouton droit :
    If bFlagClicArtificiel Then Exit Sub
    '---> ce qu'il faut faire si Click normal...
End Sub






[] Ce qui va sans dire. va mieux en le disant.