OVH Cloud OVH Cloud

ListView + clic droit

7 réponses
Avatar
Nicolas
Bonjour,

Voici mon probl=E8me :

J'ai un ListView1 auquel j'ai associ=E9 un menu contextuel=20
qui s'ouvre sur clic droit, menu comportant les options=20
suivantes (ajouter, modifier, supprimer)

Le probl=E8me c'est qu'un clic droit ne s=E9lectionne pas=20
d'office une ligne. Pour parer =E0 =E7a j'avais impl=E9ment=E9 le=20
code suivant :

Me.ListView1.ListItems("key" & Me.ListView1.HitTest(x,=20
y)).Selected =3D True

En ayant associ=E9 auparavant une cl=E9 =E0 chacune de mes=20
lignes.

Mais voil=E0, lorsque je fais un clic droit dans la liste=20
mais ailleurs que sur une ligne, =E7a me sort une erreur 91=20
car =E9videmment aucune ligne ne correspond aux coordonn=E9es=20
des curseur.

Pour ceux qui m'ont compris, si vous aviez une solution =E0=20
mon probl=E8me, ce serait vraiment g=E9nial !

Merci d'avance

Nicolas

7 réponses

Avatar
Adam Pietrasiewicz
W czwartek 26-lutego-2004 o godzinie 15:52:17 Nicolas napisa³/a


Mais voila, lorsque je fais un clic droit dans la liste
mais ailleurs que sur une ligne, ca me sort une erreur 91
car évidemment aucune ligne ne correspond aux coordonnées
des curseur.



Pour ceux qui m'ont compris, si vous aviez une solution a
mon probleme, ce serait vraiment génial !



Et pourtant c'est tres simple!

If Button = 2 Then
If Not ListView1.HitTest(x, y) Is Nothing Then

et le tour est joue!


--
Pozdrawiam
Adam Pietrasiewi
Avatar
Clive Lumb
Nicolas,

J'ai tout à fait compris....
Voici un bout de code de chez moi, ainsi qu'une fonction utile "Nodelevel"
qui permet de savoir à quel niveau on se trouve (et donc de moduler le menu
contextuel en fonction di niveau)
Clive

Public Node_Name As String
Public Work_Node As node

Function NodeLevel(ByRef nd As MSComctlLib.node) As Long
Dim ndTmp As MSComctlLib.node
If nd Is Nothing Then
NodeLevel = -1
Exit Function
End If

Set ndTmp = nd.Parent
Do Until ndTmp Is Nothing
NodeLevel = NodeLevel + 1
Set ndTmp = ndTmp.Parent
Loop
End Function

Private Sub TVW1_MouseDown(Button As Integer, Shift As Integer, x As Single,
y As Single)
If Button = 2 Then
Set Work_Node = TVW1.HitTest(x, y)

If Work_Node Is Nothing Then
' Missed !!
Else

Node_Name = Work_Node.Key
'Debug.Print Work_Node.Key
If NodeLevel(Work_Node) = 2 Then
Me.Archive.Caption = "Archiver " & Work_Node.Text
Me.Efface.Caption = "Effacer " & Work_Node.Text
Me.Envoi.Caption = "Ecrire à " & Work_Node.Text
Me.Vnc.Caption = "Prendre contrôle de " & Work_Node.Text
Me.Archive.Enabled = False
Me.Efface.Enabled = False
Me.Retablir.Enabled = False
If Work_Node.ForeColor = vbDkGreen Then
Me.Vnc.Enabled = True
Else
If Work_Node.ForeColor = vbBlue Then Me.Vnc.Caption = "Try
to install VNC"
Me.Vnc.Enabled = True
End If
Select Case Work_Node.Parent.Key
Case Is = "AR"
Me.Efface.Enabled = True
Me.Retablir.Enabled = True
Case Is = "OT"
Me.Efface.Enabled = True
Me.Archive.Enabled = True
Case Else
Me.Archive.Enabled = True
End Select
PopupMenu Con1(0)
Else
If Work_Node.Bold Then
Me.Archive.Caption = "Archiver... "
Me.Efface.Caption = "Effacer... "
Me.Envoi.Caption = "Ecrire à " & Work_Node.Text
Me.Vnc.Caption = "Prendre contrôle de "
Me.Vnc.Enabled = False
Me.Archive.Enabled = False
Me.Efface.Enabled = False
Me.Retablir.Enabled = False
PopupMenu Con1(0)
End If
If Work_Node.Index = 1 Then
PopupMenu Conf
End If
End If
End If
End If

End Sub







"Nicolas" a écrit dans le message de
news:26dc01c3fc78$20b9abe0$
Bonjour,

Voici mon problème :

J'ai un ListView1 auquel j'ai associé un menu contextuel
qui s'ouvre sur clic droit, menu comportant les options
suivantes (ajouter, modifier, supprimer)

Le problème c'est qu'un clic droit ne sélectionne pas
d'office une ligne. Pour parer à ça j'avais implémenté le
code suivant :

Me.ListView1.ListItems("key" & Me.ListView1.HitTest(x,
y)).Selected = True

En ayant associé auparavant une clé à chacune de mes
lignes.

Mais voilà, lorsque je fais un clic droit dans la liste
mais ailleurs que sur une ligne, ça me sort une erreur 91
car évidemment aucune ligne ne correspond aux coordonnées
des curseur.

Pour ceux qui m'ont compris, si vous aviez une solution à
mon problème, ce serait vraiment génial !

Merci d'avance

Nicolas
Avatar
Pascal B.
"Clive Lumb" a écrit dans le message de news:u5zTe0H$
| Nicolas,
|
| J'ai tout à fait compris....




En faite, t'as rien compris du tout:
Il s'agit d'une Listview et non d'une Treeview

Pascal
Avatar
Clive Lumb
Oh crap !!!
Autant pour moi...
Mais le principe reste le même

Clive

"Pascal B." <pascbr{_AROBASE_}hotmail{_POINT_}com> a écrit dans le message
de news:%23MxKrTI$
"Clive Lumb" a écrit dans le message de


news:u5zTe0H$
| Nicolas,
|
| J'ai tout à fait compris....




En faite, t'as rien compris du tout:
Il s'agit d'une Listview et non d'une Treeview

Pascal




Avatar
Nicolas
Merci Adam, c'est exactement ça !!!!
Merci tout de même à Clive, même si je n'ai pas tout
compris.

Nico
Avatar
Zoury
> Oh crap !!!



ROFL!!!
Avatar
Clive Lumb
Yanick,
Merci !
Et j'étais si fier de moi - la soluce toute faite...
I am glad to see that you fully understand programmers English

Clive


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%23ZLQpPN$
> Oh crap !!!

ROFL!!!