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 :

Executer une fonction pour tous les boutons d'une application


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Executer une fonction pour tous les boutons d'une application
    Bonjour à tous,

    J'ai une petite question qui me trotte dans la tête, j'espere que quelqu'un pourra y répondre.

    Je voudrais executer une fonction "onclick" globale sur tout les boutons de mon application en ASP.NET / VB.NET. Pour être plus clair, je voudrais que lorsque l'utilisateur clique sur un des boutons, une premiere fonction global soit executer, puis la fonction particuliere à ce bouton.

    Est-ce possible ? Je ne sais pas si c'est très clair...

    Merci d'avance de vos réponses.

    Cordialement.

    DeWaRs

  2. #2
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut
    Bonjour,

    Cela est possible, mais pas en utilisant le designer pour attacher les évenements aux boutons. En effet, il faudra attacher cette methode generale a tous les boutons avant leur methode particuliere car c'est l'ordre dans lequel les methodes sont attachées à un evenement qui determine l'ordre d'execution de ces methode lorsque l'evenement survient. Or le designer créé le bouton et y attache immediatement les evenements associés. Donc, si vous liez une nouvelle methode après, elle sera executée... après.

    Il vous faudra donc reprendre toute la gestion des evenements dans votre code.

    Voici un exemple en C# (Testé avant remise en forme dans l'editeur du site, donc présence d'erreur possible) :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
            public Main()
                {
                InitializeComponent();
     
                //'  Creation du bouton1
                //'  Code extrait du designer pour l'exemple. Laissez le dans le designer.
                this.myButton1.Location = new System.Drawing.Point(12, 57);
                this.myButton1.Name = "serializeButton";
                this.myButton1.Size = new System.Drawing.Size(75, 23);
                this.myButton1.TabIndex = 0;
                this.myButton1.Text = "Button1";
                this.myButton1.UseVisualStyleBackColor = true;
     
                //'  Creation du bouton2
                //'  Code extrait du designer pour l'exemple. Laissez le dans le designer.
                this.myButton2.Location = new System.Drawing.Point(12, 57);
                this.myButton2.Name = "serializeButton";
                this.myButton2.Size = new System.Drawing.Size(75, 23);
                this.myButton2.TabIndex = 0;
                this.myButton2.Text = "Button1";
                this.myButton2.UseVisualStyleBackColor = true;
     
                //'  Liaison de tous les evenements "Click" sur la methode generale
                //'  A placer avant la liaison avec les methode propre afin que la methode
                //' soit executee avant.
                this.myButton1.Click += new System.EventHandler(this.AnyButton_Click);
                this.myButton2.Click += new System.EventHandler(this.AnyButton_Click);
     
                //'  Liaison de chaque evenement "Click" sur sa methode propre.
                //'  Code extrait du designer. A gerer manuellement
                this.myButton1.Click += new System.EventHandler(this.myButton1_Click);
                this.myButton2.Click += new System.EventHandler(this.myButton2_Click);
     
                }
     
            ///' <summary>
            ///'  Methode generale a tous les boutons
            ///' </summary>
            ///' <param name="sender"></param>
            ///' <param name="e"></param>
            private void AnyButton_Click(object sender, EventArgs e)
                {
     
                '// Code de la methode generale
     
                }

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par LeCygne Voir le message
    Bonjour,

    Cela est possible, mais pas en utilisant le designer pour attacher les évenements aux boutons. En effet, il faudra attacher cette methode generale a tous les boutons avant leur methode particuliere car c'est l'ordre dans lequel les methodes sont attachées à un evenement qui determine l'ordre d'execution de ces methode lorsque l'evenement survient. Or le designer créé le bouton et y attache immediatement les evenements associés. Donc, si vous liez une nouvelle methode après, elle sera executée... après.

    Il vous faudra donc reprendre toute la gestion des evenements dans votre code.

    Merci de votre réponse.

    Si j'ai bien compris, vous suggérer de rajouter un EventHandler pour chaque bouton créer. Malheureusement, cela risque d'être trop fastidieux, a moins qu'au chargement de mes page, je face une boucle qui recherche tout les controle de type bouton et que je rajoute cet EventHandler. C'est faisable, mais ce n'est pas vraiment ce que je pensais.
    N'y a-t-il pas un moyen de "surcharger" (je ne pense pas que ce terme soit adéquate, mais rien d'autre ne me viens a l'esprit) l'event "onclick" pour lui rajouter du code a executer à chaque fois que cet event est appelé ?

    Par ailleur, peu importe que la fonction "général" soit executé avant ou apres la fonction "local".

    Des idées ?

    Cordialement.

    DeWaRs

  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
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    En WinForm on peut le faire dans l'évènement load de chaque Form.
    Utiliser une méthode récursive pour descendre dans les différents conteneurs et atteindre ainsi tous les boutons.

    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
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
            AttributMethode(Me)
        End Sub
     
        Sub AttributMethode(ByVal Conteneur As Control)
            For Each ctrl As Control In Conteneur.Controls
                Select Case True
                    Case TypeOf ctrl Is Button
                        AddHandler DirectCast(ctrl, Button).Click, AddressOf myButtonClic
                    Case TypeOf ctrl Is Panel
                        AttributMethode(ctrl)
                    Case TypeOf ctrl Is GroupBox
                        AttributMethode(ctrl)
                End Select
            Next
        End Sub
     
        Sub myButtonClic()
            MsgBox("clic")
        End Sub
    A voir avec ASP
    A+, Hervé.

  5. #5
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Merci de ton retour.

    J'ai vais plutot créer ma propre classe "MyButton" qui héritera de Windows.Forms.Button et voir ce que celà donne.
    Sinon, je partirais sur ta solution.

    Cordialement.

    DeWaRs

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/08/2012, 12h47
  2. Trouver les paramètres d'une fonction pour la faire tendre vers une valeur
    Par cedrix57 dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 24/05/2011, 10h38
  3. Réponses: 7
    Dernier message: 22/04/2010, 15h45
  4. Réponses: 3
    Dernier message: 06/09/2007, 14h31
  5. Réponses: 4
    Dernier message: 29/09/2005, 11h50

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