Récuperer la valeur texte d'un tableau de label

Résolu
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012 - 9 mai 2011 à 09:30
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012 - 10 mai 2011 à 13:36
Bonjour,

J'aimerais savoir s'il est possible de récupérer la valeur .Text du mon label dynamique quand je clique sur le bouton modifier de la ligne.

Ligne = btnModifier -> btnSupprimer -> lblFrais

        private void btnAjouter_Click(object sender, EventArgs e)
        {
            //Ajoute un nouveaux frais dans la GroupeBox
            strNom = tbxNom.Text;
            iPrix = Convert.ToInt32(tbxPrix.Text);
            Label[] lblFrais = new Label[iNombre + 1];
            Button[] btnSupprimer = new Button[iNombre + 1];
            Button[] btnModifier = new Button[iNombre + 1];

            for (int i = 0; i < 1; i++)
            {
                //Création de mon label
                lblFrais[iNombre] = new Label();
                lblFrais[iNombre].Text = strNom + " : " + iPrix.ToString();
                lblFrais[iNombre].Size = new System.Drawing.Size(147, 20);
                lblFrais[iNombre].Location = new System.Drawing.Point(60, 20 + gbxFrais.Controls.Count * lblFrais[iNombre].Height / 2);
                lblFrais[iNombre].TextAlign = ContentAlignment.MiddleRight;
                lblFrais[iNombre].Name = "F" + iNombre;
                //*********************************
                //Création de mon bouton supprimer
                btnSupprimer[iNombre] = new Button();
                btnSupprimer[iNombre].Text = "X";
                btnSupprimer[iNombre].Size = new System.Drawing.Size(20, 20);
                btnSupprimer[iNombre].Location = new System.Drawing.Point(40, 20 + gbxFrais.Controls.Count * btnSupprimer[iNombre].Height / 2);
                btnSupprimer[iNombre].Tag = iNombre;
                btnSupprimer[iNombre].Click += new System.EventHandler(this.btnSupprimer_Click);
                btnSupprimer[iNombre].Name = "X" + iNombre;
                //**********************************
                //Création de mon bouton modifier
                btnModifier[iNombre] = new Button();
                btnModifier[iNombre].Text = "M";
                btnModifier[iNombre].Size = new System.Drawing.Size(20, 20);
                btnModifier[iNombre].Location = new System.Drawing.Point(10, 20 + gbxFrais.Controls.Count * btnModifier[iNombre].Height / 2);
                btnModifier[iNombre].Tag = iNombre;
                btnModifier[iNombre].Click += new System.EventHandler(this.btnModifier_Click);
                btnModifier[iNombre].Name = "M" + iNombre;
                //**********************************
                //Ajoute les boutons et le label a la GroupBox
                gbxFrais.Controls.Add(btnModifier[iNombre]);
                gbxFrais.Controls.Add(btnSupprimer[iNombre]);
                gbxFrais.Controls.Add(lblFrais[iNombre]);
                //*******************************************
                //Additionne le prix et incremente la variable
                iTotal1 += iPrix;
                iNombre++;
                //*********************************************
                //Ergonomie
                gbxTotal.Location = new System.Drawing.Point(12, 220 + gbxFrais.Controls.Count * lblFrais[iNombre].Height / 2);
                btnValider.Location = new System.Drawing.Point(12, 395 + gbxFrais.Controls.Count * lblFrais[iNombre].Height / 2);
                lblTotal1.Text = "Total 1 : " + iTotal1.ToString();
                //*********************************************************

                
            } 
        }

        private void btnSupprimer_Click(System.Object sender, System.EventArgs e)
        {
            //Récupere l'id du bouton cliquer et identifie les deux boutons et le label.
            int inum = (int)((Button)sender).Tag;
            Control lbl = gbxFrais.Controls.Find("F" + inum, true)[0];
            Control btnX = gbxFrais.Controls.Find("X" + inum, true)[0];
            Control btnM = gbxFrais.Controls.Find("M" + inum, true)[0];
            //**************************************************************************
            //Supprime les deux boutons et le label.
            gbxFrais.Controls.Remove(lbl);
            gbxFrais.Controls.Remove(btnX);
            gbxFrais.Controls.Remove(btnM);
            //**************************************
            //Ergonomie
            gbxTotal.Location = new System.Drawing.Point(12, 220 - gbxFrais.Controls.Count / 2);
            btnValider.Location = new System.Drawing.Point(12, 395 - gbxFrais.Controls.Count / 2);
            iNombre--;
            //**********************************************************

        }

        private void btnModifier_Click(System.Object sender, System.EventArgs e)
        {
            int num = (int)((Button)sender).Tag;
            MessageBox.Show("Clic sur le bouton " + num.ToString());
        }


Merci de votre aide!

Azevedo Stéphane

8 réponses

smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
10 mai 2011 à 09:08
Une vrai liste, comme les listes dans tous les langages de programmation.
Tu sais, cette espèce de tableau avec une taille indéfinie qui augmente tout seul si besoin est.
List<Label> lblFrais = new List<Label>();

Et après tu peux ajouter des éléments en faisant lblFrais.add(new Label());
Et t'y accèdes comme un tableau avec lblFrais[i].Text
3
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
9 mai 2011 à 11:49
Tu stockes iNombre dans le nom de tes boutons
btnModifier[iNombre].Name = "M" + iNombre;

Donc tu peux extraire à partir du nom du sender, l'indice dans le tableau des boutons auquel il correspond, en convertissant en entier la sous chaine extraite à partir de l'indice 1 du nom du sender.
Et après tu peux utiliser cette indice pour accéder au label avec ton tableau des labels.

Label lvl_voulu = lblFrais[(int)((Button)sender).Name.Substring(1)]

J'ai pas Visual Studio avec moi, donc pas sûr de la syntaxe, ni des paramètres du substring qui change dans chaque langage ! L'idée est là. Il y a surement d'autres méthodes plus propres...

Du coup, on doit accéder au tableau des labels, soit tu les déclares en dehors des fonctions mais c'est pas joli, soit tu déclares tes évènement en delegate.

btnSupprimer[iNombre].Click += new System.EventHandler(this.btnSupprimer_Click);

A mettre en :
btnSupprimer[iNombre].Click += delegate { Tout le code de la fonction supprimer, comme ça tu accèdes à toutes les variables déclarer dans la fonction btnAjouter_Click( };
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
9 mai 2011 à 14:47
Salut :)

j'ai esseiller tes astuces mais rien ne va!

je ne peux pas déclarer le tableau en dehors a cause de l'incrementation.
je ne peux pas utiliser le delegate non plus toujours a cause de mon iNombre qui definie mon nombre de d'objet.
ce qui veux dire je ne peux non plus pas esseiller le :
Label lvl_voulu = lblFrais[(int)((Button)sender).Name.Substring(1)]


je veux juste recuperer la valeur de mon label de la meme ligne que mon bouton modifier quand je clique dessus...

aide moi stp s'est super important!

merci
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
9 mai 2011 à 16:37
Ne t'embête pas avec un tableau, utilise des listes ! Du coup, on s'en fiche de la taille max à l'initialisation au démarrage de l'appli et ça s'utilise pareil...

Sur le coup, j'y repense, on ne peut peut être pas utiliser sender si on prend un delegate, autant pour moi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
9 mai 2011 à 22:05
Salut

Tu entends quoi par des listes???

Et oui le Sender ne fonctionne pas sur le delegate

faut absolument que tu m'aide!!!

Merci
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
10 mai 2011 à 09:16
Salut :)

Merci pour ta reponse !!!

Je pourais le déclarer en dehors comme sa je n'aurais plus de problème ;)

Juste une derniere question ceci est possible avec un bouton???

Encore Merci

Azevedo Stéphane
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
10 mai 2011 à 11:23
Oui, tu peux mettre n'importe quel objet à l'intérieur. Au final ça se ramène simplement à stocker une référence de mémoire. Donc tu peux faire des List<List<List<Stack>>> si tu veux ;)
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
10 mai 2011 à 13:36
Merci :) tu ma fais avancer dans mon projets ;)

A une prochaine!!!

Azevedo Stéphane
0
Rejoignez-nous