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

AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention - 9 mai 2011 à 09:30 - Dernière réponse : AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention
- 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
Afficher la suite 

8 réponses

Répondre au sujet
smathis 153 Messages postés lundi 22 mars 2010Date d'inscription 17 juin 2011 Dernière intervention - 10 mai 2011 à 09:08
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de smathis
smathis 153 Messages postés lundi 22 mars 2010Date d'inscription 17 juin 2011 Dernière intervention - 9 mai 2011 à 11:49
0
Utile
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( };
Commenter la réponse de smathis
AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention - 9 mai 2011 à 14:47
0
Utile
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
Commenter la réponse de AzevedoSt27
smathis 153 Messages postés lundi 22 mars 2010Date d'inscription 17 juin 2011 Dernière intervention - 9 mai 2011 à 16:37
0
Utile
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.
Commenter la réponse de smathis
AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention - 9 mai 2011 à 22:05
0
Utile
Salut

Tu entends quoi par des listes???

Et oui le Sender ne fonctionne pas sur le delegate

faut absolument que tu m'aide!!!

Merci
Commenter la réponse de AzevedoSt27
AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention - 10 mai 2011 à 09:16
0
Utile
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
Commenter la réponse de AzevedoSt27
smathis 153 Messages postés lundi 22 mars 2010Date d'inscription 17 juin 2011 Dernière intervention - 10 mai 2011 à 11:23
0
Utile
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 ;)
Commenter la réponse de smathis
AzevedoSt27 65 Messages postés mercredi 10 novembre 2010Date d'inscription 27 mai 2012 Dernière intervention - 10 mai 2011 à 13:36
0
Utile
Merci :) tu ma fais avancer dans mon projets ;)

A une prochaine!!!

Azevedo Stéphane
Commenter la réponse de AzevedoSt27

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.