IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Comment mettre le focus sur un item d'une zone de liste par un clic droit ?


Sujet :

IHM

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/06/2006, 15h24
  2. Réponses: 2
    Dernier message: 01/05/2006, 18h02
  3. Réponses: 7
    Dernier message: 04/04/2006, 07h28
  4. MIPD 2.0 - Comment mettre le focus sur un element ?
    Par Xiao-An dans le forum Java ME
    Réponses: 4
    Dernier message: 15/12/2005, 01h55
  5. Réponses: 2
    Dernier message: 19/08/2003, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo