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 :
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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 :
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
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" <nicolasheurtevin@wanadoo.fr> a écrit dans le message de
news:26dc01c3fc78$20b9abe0$a101280a@phx.gbl...
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 :
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 !
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 :
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
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
"Clive Lumb" <clumb@gratuit_in_english.fr> a écrit dans le message de news:u5zTe0H$DHA.808@TK2MSFTNGP12.phx.gbl...
| 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