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 :

Identification Click pour un ensemble de Boutons (VB6->VBNet)


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut Identification Click pour un ensemble de Boutons (VB6->VBNet)
    Je fais migrer un programme VB6 en VBnet. Je rencontre le pb suivant :

    J'ai un groupe de boutons pour lequel j'interceptais l'événement Click par une procédure qui me donnait le numéro d'index du bouton.

    Pour chaque bouton (indexé de 0 à 31) je modifie une variable (indexé de 0 à 31)

    Comment faire en VBNet pour récupérer l'événement Click de mes boutons sans tous les traiter individuellement tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub cmdCdeManu_16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCdeManu_16.Click
     
      End Sub
    Merci d'avance pour vos propositions

  2. #2
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut
    Je sais que quand tu crée un bouton, tu peux mettre un evennement avec adress of, par exemple, pour l'evenement click, mais il faut que ce soit un bouton créé par le code.
    De là, en faisant sender.name ou e.name dans l'evennement click, tu peux récupérer le nom du bouton.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Effectivement j'ai trouvé un exemple de code illustrant cette possibilité.

    Mais là mais boutons sont créés. IL y a t'il un contrôle d'évenements un peu identique à "Controls" qui remonterait le nom du contrôle ayant généré un type particulier d'événement (ici le Click) ?

  4. #4
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    pour ne pas avoir à les traiter individuellement, tu peux brancher l'évènement "click" de chaque bouton sur la même fonction en modifiant le Handles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub cmdCdeManu_16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles cmdCdeManu_1.Click, cmdCdeManu_2.Click, ... cmdCdeManu_N.Click
     
    End Sub
    ensuite, il te suffit de typer l'objet sender en Button pour avoir accès aux propriétés du bouton qui a lancé l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub cmdCdeManu_16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles cmdCdeManu_1.Click, cmdCdeManu_2.Click, ... cmdCdeManu_N.Click
     
    dim lButton as Button
    lButton = CType(sender, Button)
     
    End Sub

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Merci Robri !
    Ta proposition réponds pour moitié à ma question.

    En effet elle me permet de récupérer l'index dans le nom du bouton et de le transférer à ma procédure ToggleIO.

    Par contre il me faut déclarer les événements Click de tous mes boutons ...

    Au résultat j'arrive à :

    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
     
      Private Sub cmdCdeManu_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles _
      cmdCdeManu_0.Click, cmdCdeManu_1.Click, cmdCdeManu_2.Click, cmdCdeManu_3.Click, cmdCdeManu_4.Click, _
      cmdCdeManu_5.Click, cmdCdeManu_6.Click, cmdCdeManu_7.Click, cmdCdeManu_8.Click, cmdCdeManu_9.Click, _
      cmdCdeManu_10.Click, cmdCdeManu_11.Click, cmdCdeManu_12.Click, cmdCdeManu_13.Click, cmdCdeManu_14.Click, _
      cmdCdeManu_15.Click, cmdCdeManu_16.Click, cmdCdeManu_17.Click, cmdCdeManu_18.Click, cmdCdeManu_19.Click, _
      cmdCdeManu_20.Click, cmdCdeManu_21.Click, cmdCdeManu_22.Click, cmdCdeManu_23.Click, cmdCdeManu_24.Click, _
      cmdCdeManu_25.Click, cmdCdeManu_26.Click, cmdCdeManu_27.Click, cmdCdeManu_28.Click, cmdCdeManu_29.Click, _
      cmdCdeManu_30.Click, cmdCdeManu_31.Click, cmdCdeManu_32.Click, cmdCdeManu_33.Click, cmdCdeManu_34.Click, _
      cmdCdeManu_35.Click, cmdCdeManu_36.Click, cmdCdeManu_37.Click, cmdCdeManu_38.Click, cmdCdeManu_39.Click, _
      cmdCdeManu_40.Click, cmdCdeManu_41.Click, cmdCdeManu_42.Click, cmdCdeManu_43.Click, cmdCdeManu_44.Click, _
      cmdCdeManu_45.Click, cmdCdeManu_46.Click, cmdCdeManu_47.Click
     
        Dim BoutonCdeManu As Button
        BoutonCdeManu = eventSender
     
        Dim Index As Integer = BoutonCdeManu.Name.Substring(BoutonCdeManu.Name.LastIndexOf("_") + 1)
        Label1.Text = CStr(Index)  'label de test pour visualiser la valeur de l'index
     
        frmMain.ToggleIO(960 + Index)
     
      End Sub
    Il ne m'a pas semblé nécessaire de typer eventSender puisqu'elle est déjà de type "button".


    Je ne referme pas le Post maintenant peut être il y a t'il une solution pour ne pas avoir à déclarer tous les événements.

  6. #6
    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.

    A la rigueur, en overridant OnControlAdded ça peut simplifier le code :
    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
     
    Public Class Form4
     
        Protected Overrides Sub OnControlAdded( _
        ByVal e As ControlEventArgs)
            MyBase.OnControlAdded(e)
            If Me.DesignMode Then Exit Sub
            If e.Control.Name.IndexOf("cmdCdeManu_") = 0 Then
                AddHandler e.Control.Click, AddressOf processButtonClick
            End If
        End Sub
     
        Private Sub processButtonClick(ByVal sender As Object, ByVal e As EventArgs)
            MsgBox(CType(sender, Control).Name)
        End Sub
     
    End Class
    Par contre, le test sur le nom du control, c'est moyen quand même.

    Je verrai bien un type perso hérité de button avec un propriété shared "index", par exemple.

    Cdt.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Merci de ta proposition Olsimare, mais je recherche un code simple à maintenir. Ben oui, je n'ai pas un gros niveau, je ne développe pas tous les jours en VB. Comme c'est une appli sur laquelle je ne reviendrais pas tous les jours, je ne veux pas être bloqué en essayant de me rappeler ce que j'avais essayé de faire.
    Et pour moi la rédefinition du comportement d'une méthode, c'est trop

    Je crois que vu mon niveau, la solution sera une création de mes boutons en Run
    comme le proposais Poulain.

    Encore merci à tous ceux qui m'ont aidé !!!

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

Discussions similaires

  1. évènement sur click pour 50 boutons d'une form
    Par timotep dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/07/2008, 11h56
  2. double click pour soumission de formulaires
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/11/2005, 12h32
  3. Formulaire -> pour savoir sur quel bouton on a cliqué.
    Par Thierry8 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/09/2005, 18h53
  4. Réponses: 3
    Dernier message: 13/06/2005, 12h05

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