AzevedoSt27
Messages postés65Date d'inscriptionmercredi 10 novembre 2010StatutMembreDernière intervention27 mai 2012
-
9 mai 2011 à 09:30
AzevedoSt27
Messages postés65Date d'inscriptionmercredi 10 novembre 2010StatutMembreDernière intervention27 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());
}
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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.
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( };
AzevedoSt27
Messages postés65Date d'inscriptionmercredi 10 novembre 2010StatutMembreDernière intervention27 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 :
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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 ;)