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 :

Gérer le click de plusieurs boutons en une seule procédure


Sujet :

Windows Forms

  1. #1
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut Gérer le click de plusieurs boutons en une seule procédure
    Bonjour à tous,

    je programme habituellement en VB6 et j'essaye de me mettre à Visual Basic 2008 express. Je sens que ce n'est pas gagné d'avance...
    Habitué aux groupes de controles sous VB6, je suis un peu désarçonné par la manière à adopter sous Net. Pour exemple je veux tout simplement avoir une seule procédure de code pour gérer le click sur 3 boutons différents, à priori archi simple sauf que je n'y arrive pas.
    Je viens de passer un bon bout de temps à rechercher à gauche à droite et je coince toujours (j'ai entre autre été voir là mais soit je suis une buse totale, pas impossible, soit y'a une erreur dans l'exemple : http://plasserre.developpez.com/v3-9.htm )

    Voici ce que j'ai comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
    Select Case sender
    Case Button1
    Debug.Print("bouton 1")
    Case Button2
    Debug.Print("bouton 2")
    Case Button3
    Debug.Print("bouton 3")
    End Select
    End Sub
    et j'ai 3 messages d'erreur disant :
    Erreur 1 L'opérateur '=' n'est pas défini pour les types 'Object' et 'System.Windows.Forms.Button'.

    Je ne veux pas (ou voudrais éviter en tout cas) de devoir placer mes Boutons dans un Panel et utiliser la collection Controls de ce panel. Je sens que je fais fausse route sur la signification de 'sender'

  2. #2
    Membre régulier Avatar de Silvers
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Bonjour en dotnet c'est facile il suffi de faire cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            Dim ButtonClick As Control = sender
            Select Case ButtonClick .Name
                Case "Button1"
                    'si on click sur le bouton 1 :
                Case "Button2"
                    'si on click sur le bouton 2 :
                Case "Button3"
                    'si on click sur le bouton 3 :
            End Select
        End Sub
    Voili voilou et sa marche !!!

    'sender' c'est l'object qui a déclanché l'évenement click !
    Si tu click sur le bouton1: sender = bouton1

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Tu peux faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            If sender.ToString().IndexOf("Button1") > 0 Then
                Debug.Print("bouton 1")
            ElseIf sender.ToString().IndexOf("Button2") > 0 Then
                Debug.Print("bouton 2")
            ElseIf sender.ToString().IndexOf("Button3") > 0 Then
                Debug.Print("bouton 3")
            End If
        End Sub
    Rah, non seulement j'oublie de me préparer pour prendre mon bus qui ne repasse que dans une heure en cherchant une soluce, mais en plus je me fait griller :p

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Comme montré dans le cours de Philippe Lasserre, il y a plus simple.

    C'est la méthode que tu as voulu utiliser mais tu as fait une erreur en recopiant.

    je ne reprends que le select car c'est là que se trouve l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select Case True
         Case sender is Button1
               'le traitement du bouton 1
         Case sender is Button2
               'le traitement du bouton 2
         Case sender is Button3
               'le traitement du bouton 3
    End Select
    J'ai mis en rouge les parties que tu dois corriger dans ton code.

    J'espère que ça t'aidera.

    Griftou.

  5. #5
    Membre régulier Avatar de Silvers
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par GriffinK Voir le message
    Tu peux faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            If sender.ToString().IndexOf("Button1") > 0 Then
                Debug.Print("bouton 1")
            ElseIf sender.ToString().IndexOf("Button2") > 0 Then
                Debug.Print("bouton 2")
            ElseIf sender.ToString().IndexOf("Button3") > 0 Then
                Debug.Print("bouton 3")
            End If
        End Sub
    Rah, non seulement j'oublie de me préparer pour prendre mon bus qui ne repasse que dans une heure en cherchant une soluce, mais en plus je me fait griller :p
    Pour moi ton code ne fonctionne pas, tu es sur que tu n'as pas fait d'erreurs ?

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

    je pencherai pourun erreur dans l'exemple, car chez moi ça ne fonctionne pas non plus.

    Essaye plutot de travailler en castant le sender en button.
    et en travaillant ensuite avec le nom du bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            Dim lButton As Button = CType(sender, Button)
            Select Case lButton.Name
                Case "Button1"
                    Debug.Print("bouton 1")
                Case "Button2"
                    Debug.Print("bouton 2")
                Case "Button3"
                    Debug.Print("bouton 3")
            End Select
    End Sub
    ou directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
            Dim lButton As Button = CType(sender, Button)
            Debug.Print(lButton.Name)
     
    End Sub
    EDIT: je me suis fait grillé aussi...

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Silvers Voir le message
    Pour moi ton code ne fonctionne pas, tu es sur que tu n'as pas fait d'erreurs ?
    Oui je l'ai testé chez moi avant de le donner...je vois pas l'intérêt de balancer des trucs qui ne fonctionnent pas.

    De toute façon il y a plus simple comme l'a indiqué griftou

  8. #8
    Membre régulier Avatar de Silvers
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par GriffinK Voir le message
    Oui je l'ai testé chez moi avant de le donner...je vois pas l'intérêt de balancer des trucs qui ne fonctionnent pas.

    De toute façon il y a plus simple comme l'a indiqué griftou
    Ce n'etait qu'une simple question, on est pas la pour ce prendre la tete, juste pour aider ce qui en on besoin.

  9. #9
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Merci à tous pour la rapidité et la pertinence de vos réponses.
    J'utilise la solution proposée par Griftou mais si j'avais oublié cette méthode du "Select Case True" à laquelle je ne suis pas habitué, je ne pense pas avoir fait d'erreur en recopiant l'extrait de code proposé dans le lien que je donne plus haut, puisque il y est dit :

    Select Case sender
    Case CouleurRouge
    ..

    ou

    Select Case True
    Case sender Is CouleurRouge
    ...
    End Select


    Avec 'CouleurRouge' étant le nom d'un des contrôles de l'exemple. Donc merci encore mais par simple curiosité j'aimerais quand même être sur qu'il n'y a pas une petite erreur dans la page à laquelle je fais référence.

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Compare le code que tu as donné dans ton premier message avec ce que j'ai donné et que j'ai repris de la page à laquelle tu fais référence. Tu verras que ce n'est pas le même.

    Il n'y a donc pas d'erreur dans le cours de Philippe Lasserre.

    Pour info, avant que je me penche sur ta question, je ne savais pas que c'était possible. J'aurai donc également appris quelque chose.

    Griftou.


    EDIT : Sorry, j'ai zappé la partie avant le "OU" dans l'exemple donné par le cours. Je crois effectivement qu'il y a une erreur pour cette partie.

  11. #11
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Citation Envoyé par griftou Voir le message
    EDIT : Sorry, j'ai zappé la partie avant le "OU" dans l'exemple donné par le cours. Je crois effectivement qu'il y a une erreur pour cette partie.
    Voilà, c'est bien de cette partie dont je parlais, donc on serait d'accord

  12. #12
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    N'oublie pas le tag résolu si ça fonctionne

    Griftou.

  13. #13
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Silvers Voir le message
    Ce n'etait qu'une simple question, on est pas la pour ce prendre la tete, juste pour aider ce qui en on besoin.
    Tout à fait

    Si mon message t'a semblé agressif, ce n'était pas voulu

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

Discussions similaires

  1. gestion plusieurs boutons dans une seule image
    Par bouchra19 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 15/05/2012, 14h33
  2. plusieurs boutons dans une meme form
    Par toutou2000 dans le forum Struts 1
    Réponses: 6
    Dernier message: 20/08/2008, 12h20
  3. é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
  4. Gérer plusieurs connexions dans une seule page Aspx
    Par Inspirate dans le forum Accès aux données
    Réponses: 6
    Dernier message: 12/07/2007, 15h06
  5. [MFC] Checker plusieurs bouton en une fois
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 08/03/2006, 17h10

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