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

Windows Forms Discussion :

Comment empêcher la prise du focus par un popup en mode MDI ?


Sujet :

Windows Forms

  1. #1
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut Comment empêcher la prise du focus par un popup en mode MDI ?
    Bonjour.

    J'ai un combobox qui utilise un popup personnalisé lors du dropdown.

    Pour définir le style de ce popup, j'override createparams comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
            Get
                Dim p As CreateParams = MyBase.CreateParams
                p.ExStyle = p.ExStyle Or (WIN32.WS_EX_NOACTIVATE Or WIN32.WS_EX_TOOLWINDOW Or WIN32.WS_EX_TOPMOST)
                p.Parent = IntPtr.Zero
                Return p
            End Get
        End Property
    Ce popup est lié à un control parent, en l'occurence le combobox, et lors de la perte du focus par ce control, je ferme le popup.

    Tout marche trés bien sauf en mode MDI :
    Dans une appli MDI, un clic sur le popup fait perdre le focus au combobox parent et entraîne donc la fermeture du popup...

    Je n'ai trouve pas trouvé de WS_EX_... ou WS_... qui me permettrait d'interdire la prise du focus par le popup en mode MDI.

    Evidemment, le popup doit rester enabled !

    Une solution ou même une idée serait la bienvenue.

    Cdt.

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    Je pense que ton popup hériet de form. As-tu essayé de modifier la propriété ShowWithoutActivation ?

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Et non, mon popup hérite de control et je ne veux pas passer par form pour faire cela.

    Je passe par l'API showWindow pour afficher le popup.

    Et ce n'est pas l'activation qui m'ennuie mais bien la prise du focus par le popup.

    Une autre idée peut être ?

    Cdt.

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    J'ai résolu mon probléme en subclassant dans le popup le control qui utilise ce popup.

    Dans le wndproc du popup :
    Lors d'un WM_SETFOCUS, si c'est le handle du control parent dans wparam, je ne fais rien.

    Dans le wndproc de la subclass sur le parent :
    Lors d'un WM_KILLFOCUS, si c'est le handle du control popup dans wparam, je ne fais rien.

    Ca marche mais je trouve ça assez moyen et ça tient du contournement même si tout reste transparent pour le control qui utilise le popup.

    Donc j'attend toujours des idées pour faire plus propre.

    Nota : plus ça va, plus je me dis que je vais arrêter le MDI !

    EDIT : ça marche pas si bien que ça ... le control parent ne perd pas le focus mais doit être dans un état un peu instable car il ne lève plus du tout l'event lostFocus même si un control autre que le popup reçoit celui-ci.
    En fait, il ne reçoit plus du tout le WM_KILLFOCUS un fois que celui-ci a été "cancelé " une fois.

    Donc j'en suis toujours au même point.

    REEDIT : en fait, je me suis rendu compte qu'en plus dans une appli MDI le control parent ne reçoit pas de WM_KILLFOCUS si le control qui reçoit le focus est sur la même form...

    J'abandonne pour l'instant, car c'est vraiment trop aléatoire comme comportement et que le but était simplement de se passer d'un hook sur la souris...
    Je remets mon hook et on en parle plus.

    Cdt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/02/2010, 04h57
  2. [WD11] comment sortir d'un champs saisie apres la prise de focus
    Par moncef_abderrahim dans le forum WinDev
    Réponses: 2
    Dernier message: 16/12/2009, 20h42
  3. Comment empécher l'enregistrement des images par le navigateur ?
    Par zouetchou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 16/08/2006, 00h14
  4. Réponses: 2
    Dernier message: 01/12/2004, 23h48

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