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.NET Discussion :

Comment savoir quand Me.ActiveControl change


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Points : 69
    Points
    69
    Par défaut Comment savoir quand Me.ActiveControl change
    Bonjour,

    Je veux qu'un événement se lève lorsque le Me.ActiveControl change. J'ai essayé plusieurs approches:

    Essai 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler Me.ActiveControl.GotFocus, AddressOf ActiveControl_GotFocus
    Comme ActiveControl n'est qu'une référence, le handler est ajouté un contrôle référencé à ce moment. Alors, lorsque le ActiveControl change, l'événement n'est pas levé par le nouveau control mais bien le précédent.

    Essai 2:
    J'ai créé une classe form qui hérite de Windows.Forms.Form afin de substituer (Overrides) la propriété ActiveControl afin de lever un événement ActiveControlChanged lorsque la propriété change mais il est impossible de substituer la propriété, on peut seulement la surcharger (Overloads) ou l'ombrager (Shadows).

    Je n'ai plus d'idée.


    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je vois 2 options :
    - intercepter le message WM_FOCUS (en overridant la méthode WndProc). Pas certain que ça marche, mais c'est pas très long à tester
    - s'abonner à l'évènement GotFocus de tous les contrôles de la form (avec le même handler).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Points : 69
    Points
    69
    Par défaut
    Salut tomlev,

    Comme l'application sera très évolutive, la 2e option m'intéressait moins, peur de faire un oublie. Malgré que je pourrais faire une méthode récursive afin d'abonner tous les contrôles désirés au meme événement GotFocus.

    Je vais tout dabord valider ta première idée.

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Passepoil Voir le message
    Comme l'application sera très évolutive, la 2e option m'intéressait moins, peur de faire un oublie. Malgré que je pourrais faire une méthode récursive afin d'abonner tous les contrôles désirés au meme événement GotFocus.
    C'est pas très difficile à faire dynamiquement a priori... en t'abonnant à l'évènement ControlAdded, tu peux t'abonner au GotFocus de chaque contrôle. Là où ça se complique c'est qu'il faut aussi s'abonner au ControlAdded de chaque contrôle enfant pour faire la même chose...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Points : 69
    Points
    69
    Par défaut
    J'avais pas pensé à l'événement ControlAdded mais j'ai testé ceci et ça ne fontionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form1_ControlAdded(ByVal sender As Object, ByVal e As _
          System.Windows.Forms.ControlEventArgs) Handles Me.ControlAdded
       AddHandler CType(sender, Control).GotFocus, AddressOf AllControl_GotFocus
       AddHandler CType(sender, Control).ControlAdded, AddressOf Form1_ControlAdded
    End Sub
    Il semble que le conteneur est déjà rempli des contrôles enfants avant d'être ajouté à la forme.

    Il serait probablement plus simple d'appeler une méthode récursive au Form.Load:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub AddGotFocusHandler(ByVal ctlParent as Control)
       AddHandler ctlParent.GotFocus, AddressOf AllControl_GotFocus
     
       For Each ctl As Control In ctlParent.Controls
          if ctl.Controls.Count > 0 then Me.AddGotFocusHandler(ctl)
       Next
    End Sub
     
    Private Sub AllControl_GotFocus(ByVal sender as Object, ByVal e As EventArgs)
       ...
    End Sub

Discussions similaires

  1. [Qt] Comment savoir quand la taille change?
    Par the_dorian dans le forum Qt
    Réponses: 3
    Dernier message: 13/07/2008, 15h40
  2. Réponses: 2
    Dernier message: 30/11/2006, 14h51
  3. Comment savoir quand le visiteur quitte un site ?
    Par StephanieH dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2006, 12h39
  4. Comment savoir quand une JFrame est rafraichie?
    Par mardona dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/08/2005, 12h20
  5. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10

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