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 10/11/2011, 14h45   #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 Comment mettre le focus sur un item d'une zone de liste par un clic droit ?

Bonjour à tous,

Voilà mon souci d'aujourd'hui, lol...

J'ai un formulaire avec une zone de liste.
Si l'utilisateur clique avec le bouton gauche, l'item de la liste est mis en surbrillance.
Si l'utilisateur clique avec le bouton droit, mon menu contextuel apparait.

Mon problème est que si l'utilisateur clique droit tout de suite sans passer par le clic gauche, alors l'action liée au menu contextuel se réalise sur l'item où à eu lieu le dernier clic gauche, et non sur l'item où a été fait le clic droit.

Comment faire pour que si l'utilisateur clique droit, alors automatiquement le focus se mette sur cet item (et par conséquent l'action se déclenche sur le bon item) ?

Merci de votre aide.

Voici le code:
Code :
1
2
3
4
5
6
7
Private Sub LstI1done_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim I1performedA As Boolean
    Dim I1performedB As Boolean
    I1performedB = False
    I1performedA = True
    If Button = 2 Then Call CreeContext(I1performedB, I1performedA)
End Sub
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
Sub CreeContext(I1performedB As Boolean, I1performedA As Boolean)
    Dim CB As CommandBar
    Dim C As CommandBarButton
    On Error Resume Next
    CommandBars("MonContextuel").Delete
    On Error GoTo 0
    Set CB = CommandBars.Add(Name:="MonContextuel", Position:=msoBarPopup, temporary:=True)
    Debug.Print "I1performedB= " & I1performedB & ", I1performedA= " & I1performedA
    With CB
      Set C = .Controls.Add(Type:=msoControlButton)
      If I1performedB = True Then
        With C
          .OnAction = "AddCorrectionI1"
          .FaceId = 3272
          .Caption = "Demande de correction effectuée"
        End With
      End If
      If I1performedA = True Then
        With C
          .OnAction = "AddOtherCorrectionI1"
          .FaceId = 1074
          .Caption = "Relance demande de correction"
        End With
      End If
      .ShowPopup
    End With
End Sub

Code :
1
2
3
4
5
6
Sub AddOtherCorrectionI1(Optional dummy As Byte)
    DoCmd.SetWarnings False
    DoCmd.RunSQL "INSERT INTO T_CORRECTIONS (TypeCorrection, DateDemande, IdInterne)" & _
    " VALUES ('I1', now(), " & Form_Inc.LstI1done & ");"
    Form_Inc.LstI1done.Requery
 End Sub
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 06h18   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 945
Points : 30 945
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

En fait il faudrait faire un test pour savoir si un élément est sélectionné dans la liste.

Pour cela tu peux utiliser la méthode ItemsSelected de ta liste et sa méthode Count pour savoir si une sélection est faite.

Essayes avec ce code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub LstI1done_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim I1performedA As Boolean
    Dim I1performedB As Boolean
    I1performedB = False
    I1performedA = True
    If Button = 2 Then 
           If Me.LstI1Done.ItemsSelected.Count = 0 then
                   Msgbox "Vous devez sélectionner un élément de la liste."
                   Exit Sub
           Else
                   Call CreeContext(I1performedB, I1performedA)
           End If
     End If
End Sub
J'ai fait la modification à la main, donc à tester.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 10h40   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Salut,

Merci pour ta réponse.

J'ai testé ton code: si aucun item n'est sélectionné, alors il y a le message "vous devez selectionner...". Mais cela ne résoud pas mon problème. En effet, les étapes sont :
- l'utilisateur clique avec le bouton gauche sur un item (item A)
- puis il clique avec le bouton droit et lance l'action
- puis il clique avec le bouton droit sur un autre item (item B) => ça lance l'action de nouveau sur l'item A car l'item A était toujours en surbrillance.

Le message "vous devez selectionner..." n'apparait pas car l'item A a été sélectionné une première fois.

Je cherche la fonction qui permet juste avec le clic droit à la fois:
- de mettre le focus sur l'élément de la liste (item B)
- de faire apparaitre le menu contextuel (c'est déjà le cas)

Merci de votre aide
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h33.


 
 
 
 
Partenaires

Hébergement Web