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 :

Plusieurs boutons faisant les mêmes actions sur differents controls


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Plusieurs boutons faisant les mêmes actions sur differents controls
    Bonjour,

    Je suis débutant en programmation et j'aimerai que vous m'aidiez pour effectuer une action certainement basique.

    J'ai créé une sorte de calendrier avec des boutons permettant de supprimer les rdv.
    Un clic sur le bouton 9h supprimer le rdv de 9h, 10h suppr le rdv de 10h et ainsi de suite.
    Le code est super lourd s'il faut le mettre à chaque fois sur chaque bouton.

    Exemple :

    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 btnSuppr9h_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr9h.Click
            btnrdv1.Text = "aucun rdv"
            lblProbleme1.Text = ""
            Panel9h.BackColor = Color.ForestGreen
            btnSuppr9h.Enabled = False
        End Sub
     
        Private Sub btnSuppr10h_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr10h.Click
            btnrdv2.Text = "aucun rdv"
            lblProbleme2.Text = ""
            Panel10h.BackColor = Color.ForestGreen
            btnSuppr10h.Enabled = False
        End Sub
     
        Private Sub btnSuppr11h_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr11h.Click
            btnrdv3.Text = "aucun rdv"
            lblProbleme3.Text = ""
            Panel11h.BackColor = Color.ForestGreen
            btnSuppr11h.Enabled = False
        End Sub
    Y aurait-il une façon de faire par exemple une fonction qui met un numéro (1, 2, 3, 4, ..., 10) après le nom d'un control ? (btnrdv1.text, btnrdv2.text, btnrdv10.text)

    J'ai pas mal cherché mais je n'ai pas trouvé de solution correspondant à mon cas, même dans la MSDN.
    Je cherche peut-être pas les bons termes.

    Je vous remercie d'avance pour l'aide que vous pourrez me fournir.

  2. #2
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Merci d'effectuer une petite recherche sur le forum, cette meme question revient plusieurs fois par semaine ...
    Voici un exemple sur un button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PrivateSub GestionDesButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_1.Click, Button_1.Click, Button_2.Click, Button_3.Click, .......
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci mais ça ne correspond pas tout à fait à ce que je recherche.
    Si j'utilise cette méthode ça modifie tous les controls, or chaque bouton doit agir sur des controls différents et non sur le même.

  4. #4
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Citation Envoyé par *Gold* Voir le message
    Si j'utilise cette méthode ça modifie tous les controls, or chaque bouton doit agir sur des controls différents et non sur le même.
    Il faut ensuite recuperer/utiliser sender qui vous donnera qui à ete clique et pour action sur tes autres objets.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup, ça m'a appris à utiliser le sender.

    Ça me donne ceci :

    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
    Private Sub GestionDesButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr9h.Click, btnSuppr10h.Click, btnSuppr11h.Click
     
            If DirectCast(sender, Button) Is btnSuppr9h Then
                btnrdv1.Text = "aucun rdv"
                lblProbleme1.Text = ""
                Panel9h.BackColor = Color.ForestGreen
                btnSuppr9h.Enabled = False
            ElseIf DirectCast(sender, Button) Is btnSuppr10h Then
                btnrdv2.Text = "aucun rdv"
                lblProbleme2.Text = ""
                Panel10h.BackColor = Color.ForestGreen
                btnSuppr10h.Enabled = False
            ElseIf DirectCast(sender, Button) Is btnSuppr11h Then
                btnrdv3.Text = "aucun rdv"
                lblProbleme3.Text = ""
                Panel11h.BackColor = Color.ForestGreen
                btnSuppr11h.Enabled = False
            End If
    Il n'y a pas encore un moyen pour alléger encore plus le code ?

    Merci.

  6. #6
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Deja eviter d'utiliser les ifelse ... mais utiliser le select case.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup, ça allège le code et le rend plus lisible.

    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
    Select Case True
                Case sender Is btnSuppr9h
                    btnrdv1.Text = "aucun rdv"
                    lblProbleme1.Text = ""
                    Panel9h.BackColor = Color.ForestGreen
                    btnSuppr9h.Enabled = False
                Case sender Is btnSuppr10h
                    btnrdv2.Text = "aucun rdv"
                    lblProbleme2.Text = ""
                    Panel10h.BackColor = Color.ForestGreen
                    btnSuppr10h.Enabled = False
                Case sender Is btnSuppr11h
                    btnrdv3.Text = "aucun rdv"
                    lblProbleme3.Text = ""
                    Panel11h.BackColor = Color.ForestGreen
                    btnSuppr11h.Enabled = False
    End Select
    Y aurait-il encore quelque chose à faire pour optimiser encore un peu ?

    Merci beaucoup pour votre aide en tout cas.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    Citation Envoyé par *Gold* Voir le message
    Merci beaucoup, ça allège le code et le rend plus lisible.
    lol
    encore quelques mois d'expérience dans le développement et tu verras que ce code n'est ni léger ni lisible ^^

    regarde du coté des usercontrols je pense (ou éventuellement des collections et de l'objet)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    lol
    encore quelques mois d'expérience dans le développement et tu verras que ce code n'est ni léger ni lisible ^^
    regarde du coté des usercontrols je pense (ou éventuellement des collections et de l'objet)
    Tu as raison sperot, mais bon faut pas en demander des tonnes au debut, et surtout c'est largement mieux que la premiere version du code
    Il est aussi certain qu'en directcastant les controles/objets, 2 lignes de code suffisent pour tous les boutons qu'il desire.
    Ne dit-on pas que : petit à petit, l'oiseau fait non nid
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je ne m'en sors pas, j'ai fait pas mal de recherche avec les mots que vous avez employé mais je tourne en rond.

    Je pense qu'on pourrait largement simplifier le code en le remaniant avec une boucle for each par exemple mais je ne sais pas comment m'y prendre.

    Tous les controls sont dans un panel ce qui permet de les rassembler par groupe.

    J'essaye de dire que pour chaque panel il effectue les modifications sur les controls mais je ne sais pas comment m'y prendre. Je n'ai pas trouvé de tuto expliquant comment faire une boucle for each avec un panel tout en accédant à ses controls.

    Pouvez-vous m'éclairer svp ?

    Merci.

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    cherche un tuto qui explique comment faire un usercontrol ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Tu as de la chance que j'ai 5 minutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub GestionDesButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr9h.Click, btnSuppr10h.Click, btnSuppr11h.Click
     
    Dim NomButton As Button = CType(sender, Button)
    Dim X as Interger = CInt(Val(NomButton.Name.Substring(8)))
     
    TonPanel.Controls("btnrdv" & CStr(X-8)).Text = "aucun rdv"
    TonPanel.Controls("lblProbleme" & CStr(X-8)).Text = ""
    TonPanel.Controls("Panel" & CStr(X) & "h").BackColor = Color.ForestGreen
    TonPanel.Controls("btnSuppr" & CStr(X) & "h").Enabled = False
     
    End Sub
    Voila, j'ai fait ca à la volee, mais ca doit fonctionner et pour tous les boutons (qu'il y en ai 3 ou 200)

    Enjoy
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide, c'est nickel comme ça.
    Je n'aurai jamais trouvé cette solution qui paraissait incompréhensible à première vue sans votre aide.
    Maintenant ça me parait bien plus clair et ça va me permettre d'avancer dans la création de mon programme.
    Merci encore.

    Le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SupprRDV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuppr9h.Click, btnSuppr10h.Click, btnSuppr11h.Click, btnSuppr12h.Click, btnSuppr13h.Click, btnSuppr14h.Click, btnSuppr15h.Click, btnSuppr16h.Click, btnSuppr17h.Click, btnSuppr18h.Click, btnSuppr19h.Click
     
            Dim NomButton As Button = CType(sender, Button)
            Dim X As Integer = CInt(Val(NomButton.Name.Substring(8)))
     
            TabCreerInterv.Controls("Panel" & CStr(X) & "h").Controls("btnrdv" & CStr(X) & "h").Text = "aucun rdv"
            TabCreerInterv.Controls("Panel" & CStr(X) & "h").Controls("lblProbleme" & CStr(X) & "h").Text = ""
            ToolTip1.SetToolTip(TabCreerInterv.Controls("Panel" & CStr(X) & "h").Controls("lblProbleme" & CStr(X) & "h"), "aucun problème")
            TabCreerInterv.Controls("Panel" & CStr(X) & "h").BackColor = Color.ForestGreen
            sender.Enabled = False
     
    End Sub
    Grâce à vous je suis passé de 60 lignes au départ à 7 lignes au final

  14. #14
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/06/2012, 12h31
  2. Récupérer les mêmes données sur plusieurs classeurs
    Par Nicko29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2012, 21h07
  3. plusieurs boutons pour une même action
    Par SweetBlueMelody dans le forum jQuery
    Réponses: 4
    Dernier message: 16/02/2012, 15h53
  4. Requete sur plusieurs tables contenant les mêmes champs
    Par Louison dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/04/2007, 20h41
  5. Plusieurs version d'une même App sur un même serveur
    Par Jeweller dans le forum XMLRAD
    Réponses: 27
    Dernier message: 14/02/2006, 11h33

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