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

C# Discussion :

Créer une classe dérivée d'un objet label


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut Créer une classe dérivée d'un objet label
    Bonjour à tous,

    Voilà je commence à comprendre l'utilité des classes...
    Dans mon projet j'aimerais bien créer une classe car je fais une tâche répétitive mais je ne sais absolument pas comment m'y prendre car j'ai un objet label.

    Voici mon 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
    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
    47
    private void label1Joueur_Click(object sender, EventArgs e)
            {
                label1Joueur.BackColor = Color.Gray;
                label1Joueur.ForeColor = Color.White;
                label2Joueur.BackColor = default(Color);
                label2Joueur.ForeColor = default(Color);
                label3Joueur.BackColor = default(Color);
                label3Joueur.ForeColor = default(Color);
                label4Joueur.BackColor = default(Color);
                label4Joueur.ForeColor = default(Color);
            }
     
            private void label2Joueurs_Click(object sender, EventArgs e)
            {
                label2Joueur.BackColor = Color.Gray;
                label2Joueur.ForeColor = Color.White;
                label1Joueur.BackColor = default(Color);
                label1Joueur.ForeColor = default(Color);
                label3Joueur.BackColor = default(Color);
                label3Joueur.ForeColor = default(Color);
                label4Joueur.BackColor = default(Color);
                label4Joueur.ForeColor = default(Color);
            }
     
            private void label3Joueurs_Click(object sender, EventArgs e)
            {
                label3Joueur.BackColor = Color.Gray;
                label3Joueur.ForeColor = Color.White;
                label1Joueur.BackColor = default(Color);
                label1Joueur.ForeColor = default(Color);
                label2Joueur.BackColor = default(Color);
                label2Joueur.ForeColor = default(Color);
                label4Joueur.BackColor = default(Color);
                label4Joueur.ForeColor = default(Color);
            }
     
            private void label4Joueurs_Click(object sender, EventArgs e)
            {
                label4Joueur.BackColor = Color.Gray;
                label4Joueur.ForeColor = Color.White;
                label1Joueur.BackColor = default(Color);
                label1Joueur.ForeColor = default(Color);
                label2Joueur.BackColor = default(Color);
                label2Joueur.ForeColor = default(Color);
                label3Joueur.BackColor = default(Color);
                label3Joueur.ForeColor = default(Color);
            }
    J'aimerais le simplifier en créant une classe
    Merci d'avance le forum

    Valentin.

  2. #2
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour VTT85,

    C'est très bien de vouloir automatiser une tâche répétitive ( c'est un peu notre boulot ).

    Le comportement commun içi c'est le click qui change les propriétés BackColor et ForeColor du label visée , et remet à zéro les autres.
    Tu peux donc refactoriser en un seul événement click , c'est à dire tous les labels abonnés au même événement click.

    Caster le sender te permet de récupérer le label visé , ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Label label = sender as Label;
     
                if (label != null)
                {
                    // tu sais ce qu'il te reste à faire içi.
                }
    Il te reste maintenant à modifier les couleurs du label , et remettre à défaut les autres.

    Bon code!

  3. #3
    Membre averti Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut
    Super merci beaucoup pour l'info. +1

    J'ai donc fais ceci comme code pour également récupérer le nombre de joueurs:

    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
    private void labelJoueur_Click(object sender, EventArgs e)
            {
                int nbJoueurs = 0;
                //Initialisation des couleurs des labels
                label1Joueur.BackColor = default(Color);
                label1Joueur.ForeColor = default(Color);
                label2Joueur.BackColor = default(Color);
                label2Joueur.ForeColor = default(Color);
                label3Joueur.BackColor = default(Color);
                label3Joueur.ForeColor = default(Color);
                label4Joueur.BackColor = default(Color);
                label4Joueur.ForeColor = default(Color);
     
                Label label = sender as Label;
                if (label != null)
                {                
                    label.BackColor = Color.Gray;
                    label.ForeColor = Color.White;
                }
                if (label == label1Joueur)
                {
                    nbJoueurs = 1;
                }
                if (label == label2Joueur)
                {
                    nbJoueurs = 2;
                }
                if (label == label3Joueur)
                {
                    nbJoueurs = 3;
                }
                if (label == label4Joueur)
                {
                    nbJoueurs = 4;
                }
            }
    Ceci je ne peux pas le factoriser plus ?
    Merci WaterTwelve21

  4. #4
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    A quoi te sert le nombre de joueur ?

    Le but de refactoriser c'est éviter cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     label1Joueur.BackColor = default(Color);
                label1Joueur.ForeColor = default(Color);
                label2Joueur.BackColor = default(Color);
                label2Joueur.ForeColor = default(Color);
                label3Joueur.BackColor = default(Color);
                label3Joueur.ForeColor = default(Color);
                label4Joueur.BackColor = default(Color);
                label4Joueur.ForeColor = default(Color);
    Donc oui tu peux refactoriser plus que ça :

    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
      private void labelJoueurs_Click(object sender, EventArgs e)
            {
                Label label = sender as Label;
     
                if (label != null)
                {
                    label.BackColor = Color.Gray;
                    label.ForeColor = Color.White;
     
                    ToogleOtherLabels(label);
                    // => remettre a default(Color) les autres labels , en paramétre le label visé pour ne pas toucher à celui visé.
                   // tu peux boucler sur les contrôles de ta form en bouclant sur this.Controls
                   // à toi de coder cette le contenu de cette méthode.
     
                }
            }

  5. #5
    Membre averti Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut
    J'ai besoin de récupérer le nombre de joueurs pour ensuite mettre un menu différents selon le nombre de joueurs.

    Je ne vois vraiment pas quoi mettre dans la méthode ToogleOtherLabels(label)...
    Comment est-il possible de récupérer tous les autres labels en fonction de celui visé pour les faire appliquer backcolor et forecolor ?

    Désolé je débute

  6. #6
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Cela peut être plus optimisé pour éviter de relire à chaque fois l'intégralité des controls mais dans l'idée c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void ToogleOtherLabels(Label label)
            {
                foreach (Control c in this.Controls)
                {
                    if(c is Label && !c.Name.Equals(label.Name) && (c.Name.Contains("Joueur")))
                    {   
                       c.BackColor = default(Color);
                       c.ForeColor  = default(Color);
                    }
                }
            }

Discussions similaires

  1. aide pour créer une classe objet
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 18/03/2014, 00h25
  2. [Débutant] Comment créer une classe pour stocker objets personnalisés
    Par BasicZX81 dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/04/2012, 09h27
  3. Réponses: 2
    Dernier message: 31/03/2010, 15h08
  4. Réponses: 3
    Dernier message: 02/01/2010, 23h21
  5. préciser le type des objets dans une classe dérivée d'arraylist
    Par JCD21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/06/2008, 18h04

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