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 :

procédure évènementielle à une collection de Controls [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ergotherapeute
    Inscrit en
    Août 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ergotherapeute
    Secteur : Santé

    Informations forums :
    Inscription : Août 2012
    Messages : 86
    Par défaut procédure évènementielle à une collection de Controls
    Bonjour,

    j'essaye d'attribuer une procédure évènementielle à une collection de controls sachant que la procédure évènementielle en question modifie les propriétés du control concerné

    Pour comprendre je m’entraîne sur un exemple simplifié.
    imaginons que j'ai une Form (Form1), un panel (Panel1) contenant 20 boutons (Button1, Button2, Button3, Button4...)
    Je souhaite que le click sur le bouton entraine la modification du text du bouton concerné en affichant "coucou"

    J'ai essayé ce code mais il rien ne se passe :
    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
     Public Class Form1
        Dim BT As Button
        Private Sub changertextedans()
            Dim i As Integer
            For i = 0 To Me.Panel1.Controls.Count - 1
                BT = Me.Panel1.Controls(i)
                AddHandler BT.Click, AddressOf changertexte
            Next i
     
        End Sub
     
        Private Sub changertexte()
            BT.Text = "coucou"
        End Sub
     
    End Class
    Merci pour votre aide...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Il faut attribuer une nouvelle procédure au click, et utiliser sender pour connaître celui qui génére le Click.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub frmEvent_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            AddHandler Button1.Click, AddressOf Button_Click
            AddHandler Button2.Click, AddressOf Button_Click
            AddHandler Button3.Click, AddressOf Button_Click
            '...
        End Sub
     
        Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim bt As Button = sender
            bt.Text = "click"
        End Sub
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre confirmé
    Homme Profil pro
    ergotherapeute
    Inscrit en
    Août 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ergotherapeute
    Secteur : Santé

    Informations forums :
    Inscription : Août 2012
    Messages : 86
    Par défaut
    ok déjà un grand merci car ton exemple m'a permis de résoudre une grosse partie de ma problématique.

    en réalité j'ai une centaine de controle dans le panel.
    faut-il taper la phrase "AddHandler Button1.Click, AddressOf Button_Click" pour chaque contrôles?
    pourquoi la simplification ci-dessous ne fonctionne-t-elle pas ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim i As Integer
            Dim BTO As Button
            For i = 0 To Panel1.Controls.Count - 1
                BTO = Panel1.Controls(i)
            Next i
            AddHandler BTO.Click, AddressOf Button_Click
    Encore merci pour ton aide

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par veens777 Voir le message
    faut-il taper la phrase "AddHandler Button1.Click, AddressOf Button_Click" pour chaque contrôles?
    Pas du tout, c'était simplement pour mon test.

    J'ai fait un autre test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub frmEvent_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim BT As Button
            For i = 0 To Me.Panel1.Controls.Count - 1
                BT = Me.Panel1.Controls(i)
                AddHandler BT.Click, AddressOf Button_Click
            Next i
        End Sub
     
        Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim tb As Button = sender
            tb.Text = "click"
        End Sub
    et cela fonctionne.


    Citation Envoyé par veens777 Voir le message
    pourquoi la simplification ci-dessous ne fonctionne-t-elle pas ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim i As Integer
            Dim BTO As Button
            For i = 0 To Panel1.Controls.Count - 1
                BTO = Panel1.Controls(i)
            Next i
            AddHandler BTO.Click, AddressOf Button_Click
    Ta simplification ne fonctionne pas car le "AddHandler" est en dehors de ta boucle. (Seul le dernier bouton est concerné.)

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre confirmé
    Homme Profil pro
    ergotherapeute
    Inscrit en
    Août 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ergotherapeute
    Secteur : Santé

    Informations forums :
    Inscription : Août 2012
    Messages : 86
    Par défaut
    nikel tout fonctionne !

    encore MERCI !

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

Discussions similaires

  1. Déclarer et manipuler une collection de controles
    Par Lincoln911 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/04/2010, 14h23
  2. Affiné recherche sur une collection de controle
    Par Lapinpanda dans le forum ASP.NET
    Réponses: 0
    Dernier message: 19/08/2009, 16h40
  3. comment appeler une procédure événementielle
    Par OutOfRange dans le forum Débuter
    Réponses: 8
    Dernier message: 03/06/2005, 19h32
  4. Controle dans une collection
    Par rolototo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/02/2005, 14h12

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