TreeView - Sélection avec clic droit

cs_Byrong Messages postés 224 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 24 juillet 2013 - 28 août 2012 à 14:28
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 29 août 2012 à 01:18
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 août 2012 à 18:52
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)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
29 août 2012 à 00:17
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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
29 août 2012 à 01:18
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.
0
Rejoignez-nous