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 :

c# modifier le texte d'un label qui se trouve dans un collection type list. [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut c# modifier le texte d'un label qui se trouve dans un collection type list.
    Bonjour,

    Voila le problème.

    J'aimerai, lorsque je clique sur ce bouton :

    private void cmdJeu_Click(object sender, EventArgs e)
    {

    Button cmdJeu = (Button)sender;
    cmdJeu.Visible = false;
    changeJoueur();
    lblJoueur.Focus();

    }

    modifier le texte d'un label situé dans une collection de type liste qui se trouve ici :

    private List<Label> lblJeu = new List<Label>(); //Contient les 9 labels sous les boutons

    Le problème étant que lorsque je transtype ce label de cette façon :

    Label lblJeu = (Label)sender;
    lblJeu.Text = " test";

    Le message d'erreur suivant s'affiche et le programme plante : System.InvalidCastException*: 'Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.Button' en type 'System.Windows.Forms.Label

    Merci par avance pour votre aide précieuse !

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonsoir,

    Le paramètre sender représente le contrôle qui a appeler cette méthode, en l’occurrence ton bouton. Du coup je vois pas trop ce que tu veux faire si tu essaye de le cast en Label.

    Tu n'as pas besoin de cast le label vu qu'il est déjà dans ta liste normalement. A toi de voir comment tu veux faire correspondre le label dans la liste, etc ...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Bonsoir Pixel,

    Merci pour ton retour,

    En fait mon bouton se trouve dans une collection de 9 boutons, mes labels dans une collection de 9 labels.
    private List<Button> cmdJeu = new List<Button>();//contient les 9 boutons du jeu
    private List<Label> lblJeu = new List<Label>(); //Contient les 9 labels sous les boutons
    Je voudrais, lorsque je clique sur un des 9 boutons modifier le texte du label correspondant qui doit avoir le même indice.
    Le problème est que je connais pas la procédure, voila le code de création des boutons, c'est la même chose pour les labels.
    Je ne vois pas quel code entrer dans cmdJeu_click pour demander la modification du label dans le même temps.
    //Création du bouton
    for (int k = 0; k < 9; k++)
    {
    //Création du bouton
    Button cmdJeu = new Button();
    //Affichage du bouton dans la form
    this.Controls.Add(cmdJeu);
    //fixe la taille du bouton
    cmdJeu.Size = new Size(sizeButton, sizeButton);

    // Abonne une fonction à l' event
    cmdJeu.Click += cmdJeu_Click;
    //Posiiton du bouton
    col++;
    if (k % nbBtnParLigne == 0)
    {
    line++;
    col = 0;
    }
    // positionne le bouton dans la forme
    cmdJeu.Location = new Point(posXButton + sizeButton * col, posYButton - 120 + sizeButton * line);
    cmdJeu.BringToFront();
    }

    Merci pour ton aide Pixel !

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonsoir,

    Je comprends mieux alors. Du coup je te propose deux solutions :

    La méthode simple mais pas très propre :

    Tu utilises la propriété Tag des boutons. Lors de leurs création, tu attribues l'index à cette propriété comme ceci :


    Ensuite lors de l'utilisation de ton bouton, tu récupères ton label comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Button cmdJeu = (Button)sender; 
    Label label = lblJeu[(int)cmdJeu.Tag];
    label.Text = " test";
    Comme ça, la concordance entre le bouton et le label est faite.

    Mais comme tu peux voir, c'est pas fou-fou niveau propreté & principes de programmation.

    La méthode moins simple mais plus propre :

    Tu utilises des UserControls. Cela correspond parfaitement a ton cas de figure. C'est un ensemble de contrôles. Tu en crée un qui contient un bouton et un label (ou d'autres choses si le besoin s'en fait sentir). Le bouton et le label sont déjà associés de par la nature du UserControl. Tu peux en plus les créer à la chaîne comme tu le fais avec les boutons et les labels, et leur passer des informations si jamais.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Merci beaucoup !

    Le deuxième à l'air effectivement plus propre.
    Je vais tenter ça !

    Encore merci Bonne soirée !

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu peux aussi les nommer de façon logique (MonBoutton1, MonLabel1, MonBoutton2, MonLabel2, ...) ou créer un tableau de correspondance.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/08/2014, 13h18
  2. Réponses: 10
    Dernier message: 29/07/2014, 15h44
  3. Réponses: 2
    Dernier message: 02/05/2012, 11h19
  4. modifier le text d'un label sur une Form
    Par wissem.ba dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/01/2009, 00h35
  5. modifier le texte d'un label
    Par maximedu42 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 31/10/2007, 20h52

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