Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 16h47   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Par défaut Evenement zone de liste - item n-1 selectionné par clic droit au lieu de l'item n

Bonjour à tous,

Voilà, mon post précédent ici n'a pas été résolu. J'ai tenté pas mal de choses, sans succès. J'ouvre donc un nouveau topic, sachant que depuis je suis passée sous office 2010.

Le problème: j'ai une zone de liste
- si je clic gauche sur un item n puis droit, mon menu apparait: je selectionne l'action dans mon menu et elle s'applique bien à mon item n
- si je clic droit sur un item n (sans passer par le clic gauche), mon menu apparait: je selectionne l'action dans mon menu et elle ne s'applique pas à mon item mais à l'item n-1

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
Public ZLValue As String
Private Const CommandBarName As String = "MyListControlContextMenu"
 
 
Private Function GetZLValue() As String
    If IsNull(ZL) Then
        GetZLValue = "null"
    Else
        GetZLValue = ZL
    End If
End Function
 
 
Private Sub ZL_BeforeUpdate(Cancel As Integer)
    ZLValue = GetZLValue
    AvantMaj = GetZLValue 'voir pièce jointe
End Sub
 
 
Private Sub ZL_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Form.SetFocus
    ZL.SetFocus
    SurSourisAppuyee = GetZLValue 'voir pièce jointe
End Sub
 
 
Private Sub ZL_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = acRightButton Then
        SetUpContextMenu
        CommandBars(CommandBarName).ShowPopup
    End If
    SurSourisRelachee = GetZLValue 'voir pièce jointe
End Sub
Je vous mets également une pièce jointe.
Merci de votre aide.
Images attachées
Type de fichier : jpg Image1.jpg (81,0 Ko, 5 affichages)
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h55   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Regadre si l'événement Click se déclenche sur ta liste losrque tu sélectionne avec le bouton droit.

Si oui, demande quel item est sélectionné.

Je soupsconne que le click droit n'est pas reconnu par la liste comme un événement qui la modifie.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h18   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Merci marot_r de ton aide. Mias je n'y comprends vraiment rien aux événements...

L'évenement Click se déclenche bien quand je clique avec le bouton droit et récupère le bon item n. Le problème est que l'événement Click ne dispose pas de l'argument Button, donc je ne peux pas lui dire de m'afficher le menu contextuel uniquement quand le clic est fait avec le bouton droit.

Voici mon code: quel que soit le bouton cliqué, gauche ou droite, le menu contextuel apparait, l'action déclenchée en cliquant sur le menu fonctionne bien et affiche le bon item, mais est-il possible de ne faire apparaitre le menu contextuel qu'au clic droit ? Si j'utilisais mouseUp c'est que j'avais besoin de déclencher l'apparition du menu au clic droit (mouseUp dispose de l'argument Button), mais mouseUp me récupère l'item n-1...

Merci pour votre aide.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Public ZLValue As String
Private Const CommandBarName As String = "MyListControlContextMenu"
 
 
Private Function GetZLValue() As String
    If IsNull(ZL) Then
        GetZLValue = "null"
    Else
        GetZLValue = ZL
    End If
End Function
 
 
Private Sub ZL_Click()
    ZLValue = GetZLValue
    SetUpContextMenu
    CommandBars(CommandBarName).ShowPopup
End Sub
 
 
Public Sub SetUpContextMenu()
    On Error Resume Next
    CommandBars(CommandBarName).Delete
    On Error GoTo 0
    Dim popup As CommandBar
    Set popup = CommandBars.Add(Name:=CommandBarName, Position:=msoBarPopup)
    Dim Button As CommandBarButton
    Set Button = popup.Controls.Add(Type:=msoControlButton)
    With Button
        .OnAction = "TestBox"
        .FaceId = 3272
        .Caption = "Demande OK"
    End With
End Sub
 
 
Public Sub TestBox()
    MsgBox Form_Test.ZLValue, vbOKOnly, "TestBox"
End Sub
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h12   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Citation:
L'évenement Click se déclenche bien quand je clique avec le bouton droit et récupère le bon item n. Le problème est que l'événement Click ne dispose pas de l'argument Button, donc je ne peux pas lui dire de m'afficher le menu contextuel uniquement quand le clic est fait avec le bouton droit.
OK au temps pour mon hypothèse.

Si le déclage est systématique (toujours -1) tu pourrais aller chercher l'élément sélectionné + 1. Ce n'est vraiment pas propre comme méthode mais si tu expliques pourquoi tu fais cela dans ton code et que ça marche c'est acceptable.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 22h38   #5
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Aie... malheureusement, prendre le n-1, je crois que ça ne marchera pas pour le 1er, je retesterai.

Quand on veut ajouter un menu contextuel, il faut obligatoirement se servir de MouseUp (ou Down) ?

Si oui, personne n'a jamais été confronté à mon problème, à savoir de ne pas récupérer la valeur sur laquelle le clic droit a été effectué ?
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 11h19   #6
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Bonjour à tous,

En relisant mon post, je me dis que je me suis peut être mal exprimée . Quand je dis item n, c'est par exemple la ligne 10 de la listbox.
Quand je dis item n-1, c'est par exemple la ligne 18 de la listbox.
La ligne 18 est sélectionnée en premier, la ligne 10 en deuxième.
n et n-1 ne sont pas 2 éléments successifs dans la liste mais 2 éléments sélectionnés successivement.

Bref, j'ai cherché cherché et encore cherché. La seule chose que j'ai trouvé, c'est qqn dans le meme cas que moi sur un forum anglo-saxon, mais pas de réponse apportée.

J'ai testé pleins de combinaisons:
- before update puis mouse up
- before update puis mouse down
- after update puis mouse up
- after update puis mouse down
- mouse up qui inclut le click pour récupérer l'item
- j'ai tenté de remettre à zéro la sélection avec ListIndex = -1 (ça ne surlgne plus rien mais toujours en mémoire l'item n-1 dans le mouse up)
- mouse up qui déclenche menu contextuel puis clic sur le sous menu et lancement de la fonction

Rien ne marche car mouse up (ou mouse down, c'est la même chose) se déclenche toujours avant before update ou after update. Donc mouse up (ou down) se déclenche avant que j'ai récupéré la bonne valeur.

Avec tout ce que je vois sur les forums, je me dis que vba peut faire pleins de choses. Et je me dis aussi que ce que je souhaite faire ne parait pas invraisemblable. (récupérer une valeur d'une zone de liste atteinte par clic droit) alors j'en viens à penser que je ne m'exprime pas bien. donc je retente une formulation en espérant que je serais plus claire

J'ai une zone de liste créée à partir d'une requête. Quand l'utilisateur clique droit, un menu apparait: l'utilisateur sélectionne le sous menu => une action doit se déclencher sur l'identifiant de l'item sélectionné par le clic droit (mise à jour d'une variable dans une table).

Si l'utilisateur clic gauche PUIS droit, ça marche.
Si l'utilisateur clic droit directement, ça ne marche pas. Why ?

En espérant que vous puissiez m'aider. Peu importe la méthode utilisée:
- interdire le clic droit tant que le clic gauche n'est pas fait, why not.
- utiliser une sub qui, comme MouseUp, reconnait l'argument Button

Merci d'avance
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 19h09   #7
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Idée de façon tordue d'arriver à tes fins :
  1. Réagir au MouseDown :
    active une variable locale au formulaire qui dit qu'il vient d'avoir un MouseDown
  2. Réagir au clic :
    tester si variable locale indique qu'il y a eu un MouseDown
    si oui ouvrir le menu
    si non continuer avec le clic normal
    Reinitialiser variable locale

C'est assez dégueu mais ça pourrait marcher.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h24   #8
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134



Yes ! ça marche

J'avais pas pensé à cette technique. J'étais restée bloquéé sur le menu à faire apparaitre dans le mouse down. là, je le fais apparaitre dans le click.

un énorme à toi, tu as résolu un problème sur lequel je bloquais depuis longtemps.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 18h40   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Certe mais cela reste une façon tordue d'arriver à ses fins.

Je trouve ta méthode initiale beaucoup plus éléguante et logique.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h21.


 
 
 
 
Partenaires

Hébergement Web