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

VB 6 et antérieur Discussion :

[VB6]Deux clics sur le bouton 'OK' parfois nécessaires pour fermer un Form


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [VB6]Deux clics sur le bouton 'OK' parfois nécessaires pour fermer un Form
    Bonjour,

    J'ai créé une application en VB6. Or, il m'arrive un truc bizarre : je dois parfois cliquer deux fois sur un bouton de validation (OK, Valider) pour que ce clic soit pris en compte (le premier clic n'est alors pas intercepté, j'ai vérifié en mettant un point d'arrêt dans la fonction btnOK_Click).

    Par exemple, j'ouvre une fenêtre en cliquant sur un bouton. Cette fenêtre contient des ComboBox et CheckBox, un bouton 'Annuler' et un bouton 'OK'. Il me faut cliquer deux fois sur 'OK' pour fermer la fenêtre. Le truc, c'est que des fois, ça marche normalement (un seul clic).

    J'ai essayé de donner un focus total à cette fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    dans le Form_Load, et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    dans le Form_Unload, mais le problème persiste... Quelqu'un a-t-il une idée de solution, ou est-ce un bug connu de VB6, ou autre ?
    Merci d'avance.

    Précision importante : les boutons ne sont pas les standards Windows, mais proviennent d'un ActiveX que j'ai créé. Seuls les boutons de validation provoquent cette erreur, pas les autres (Annuler, Suivant, Précédent, ...). La question devient alors : pourquoi est-ce que ça ne pose problème que pour les boutons de validation, et pas les autres (alors qu'ils sont tous de même type) ?


    RoKeN

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    ce que tu as mis comme code ne donne pas "un focus total" à la form, mais force la form au 1er plan, nuance !

    sans plus de détails, impossible de te répondre

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Que dire de plus comme précisions ?...

    Mon bouton est donc un contrôle ActiveX. J'ai donc un fichier StandardLightButton.ctl qui définit un UserControl : mon StandardLigntButton. Ce UserControl contient une PictureBox nommée Picture1 et une Image nommée btImage.

    Voici tout ce qui gère le clic dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Event Click()
     
    Private Sub btImage_Click()
      UserControl_Click
    End Sub
     
    Private Sub UserControl_Click()
      If Not Enabled Then Exit Sub
      RaiseEvent Click
    End Sub
    J'ai rajouté récemment (mais a priori c'est pas utile) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Picture_Click()
      UserControl_Click
    End Sub
     
    Private Sub StandardLightButton_Click()
      UserControl_Click
    End Sub
     
    Private Sub Picture1_Click()
      UserControl_Click
    End Sub
    Je définis aussi :
    - Pour btImage : MouseDown, MouseUp
    - Pour UserControl : MouseDown, MouseUp, EnterFocus, ExitFocus, Initialize, KeyDown, KeyPress, KeyUp

    Et dans mon code qui utilise ce bouton, j'utilise donc btnOK_Click().

    En tout cas, merci pour ta réponse !

    RoKeN

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserControl_Click()
      If Not Enabled Then Exit Sub
      RaiseEvent Click
    End Sub
    Ca, c'est pas terrible !
    Si tu gères correctement la propriété Enabled de ton controle, pourquoi la mettre ici, à part pour générer des aléas ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Est-ce que tu veux dire par là qu'il faut que j'enlève cette ligne de mon OCX pour le gérer dans mon programme qui utilise ce bouton (i.e dans les fonctions btnXXX_Click) ? Car si j'enlève cette ligne, alors je peux cliquer sur le bouton même s'il est désactivé.

    Je pense avoir résolu mon problème, même si je ne sais pas comment/pourquoi ça marche ; donc si quelqu'un a des explications... Je vais essayer d'être clair.

    J'ai d'abord remarqué que quand je cliquais avec la souris sur le texte du bouton ("OK", "Valider", ...) il fallait que je clique deux fois pour que la procédure btImage_Click soit appelé, alors que quand je cliquais en dehors de ce texte, une seule fois suffisait.

    En fait, ce n'est pas moi qui ait fait ce contrôle ActiveX, et à ce que j'ai compris du code, ce texte n'est pas le Caption du bouton, mais une sorte d'image (btImage est de type Image) sur laquelle le texte est ajouté. Le bouton est un UserControl qui contient une PictureBox et une Image (c'est là où je ne comprends pas exactement l'utilité de ces deux objets, mais ils sont nécessaires).

    Voici ce que j'ai modifié pour que ça marche. Le code initial était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Property Set ButtonPicture(dsp As Picture)
        Set btImage.Picture = dsp
        If Not btImage.Picture = 0 Then
            btImage.Width = ScaleX(btImage.Picture.Width, vbHimetric, vbPixels)
            btImage.Height = ScaleY(btImage.Picture.Height, vbHimetric, vbPixels)
            btImage.Top = (ScaleHeight - btImage.Height) / 2
            btImage.Left = (ScaleWidth - btImage.Width - TextWidth(text) - interv) / 2
        End If
    End Property
    et il se trouvait que btImage.Picture valait 0 à chaque fois. Cette propriété est appelée lors du chargement du bouton et lors de la fermeture de la fenêtre le contenant (unload du bouton). Il m'a suffit de supprimer le If (uniquement les deux lignes If / End If, pas le code à l'intérieur) pour que ça marche.

    Donc si quelqu'un a une idée, une précision à apporter, n'hésitez pas, ça pourrait toujours aider... En tout cas, merci pour vos conseils et votre aide. Je ne mets pas ce sujet en [Résolu] tout de suite au cas où des réponses soient apportées.

    RoKeN

Discussions similaires

  1. Deux questions: l'heure et le clic sur un bouton
    Par molo2003 dans le forum MFC
    Réponses: 2
    Dernier message: 21/04/2006, 23h26
  2. [STRUTS] plusieurs clic sur un bouton
    Par jehlg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/03/2006, 15h02
  3. Changer la feuille de style a l aide d un clic sur un bouton
    Par jean_bobi dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/11/2005, 08h35
  4. pb sur le premier clic sur un bouton
    Par corwin44 dans le forum Access
    Réponses: 6
    Dernier message: 28/10/2005, 09h51
  5. Gérer les clics sur les boutons
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 08/02/2004, 15h34

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