AzevedoSt27
Messages postés65Date d'inscriptionmercredi 10 novembre 2010StatutMembreDernière intervention27 mai 2012
-
5 mai 2011 à 08:55
AzevedoSt27
Messages postés65Date d'inscriptionmercredi 10 novembre 2010StatutMembreDernière intervention27 mai 2012
-
5 mai 2011 à 11:15
Bonjour,
Mon problème est le suivant. Quand je clique sur mon bouton ajouter une ligne d'objet dynamique ce crée avec un bouton Modifier, un bouton Supprimer et un label. j'aimerais savoir s'il est possible de supprimer cette ligne et comment!?!?
string strNom;
int iPrix;
int iTotal1;
int iNombre = 0;
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[10];
Button[] btnSupprimer = new Button[10];
Button[] btnModifier = new Button[10];
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(140, 20);
lblFrais[iNombre].Location = new System.Drawing.Point(60, 20 + gbxFrais.Controls.Count * lblFrais[iNombre].Height / 2);
lblFrais[iNombre].TextAlign = ContentAlignment.MiddleRight;
lblFrais[iNombre].Tag = 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);
//**********************************
//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);
//**********************************
//Ajoute les boutons et le label a la GroupBox
gbxFrais.Controls.Add(btnModifier[iNombre]);
gbxFrais.Controls.Add(btnSupprimer[iNombre]);
gbxFrais.Controls.Add(lblFrais[iNombre]);
//*******************************************
//Bouge la GroupBox Total et le bouton Valider vers le bas
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);
//*********************************************************
//Additionne le prix et incremente la variable
iTotal1 += iPrix;
iNombre++;
//*********************************************
}
}
private void btnSupprimer_Click(System.Object sender, System.EventArgs e)
{
int num = (int)((Button)sender).Tag;
MessageBox.Show("Clic sur le bouton " + num.ToString());
}
}
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 5 mai 2011 à 09:43
Salut,
de la même manière que tu fais :
gbxFrais.Controls.Add(btnModifier[iNombre]);
pour supprimer il suffit de faire :
gbxFrais.Controls.Remove(btnModifier[iNombre]);
Mais il faut pour cela que btnModifier[] soit accessible dans ta fonction de suppression, ce qui n'est pas ton cas actuellement, car ce tableau est déclaré dans ta fonction btnAjouter_Click().
Une alternative serait de remplir les attributs Name de tes contrôles dynamiques. Tu pourrais ainsi les atteindre avec la méthode :
Dans ta fonction de suppression, pour supprimer les contrôles de la ligne i , il suffit alors de retrouver ces contrôles :
Control lbl = gbxFrais.Controls.Find("F" + i, true);
Control btnX = gbxFrais.Controls.Find("X" + i, true);
Control btnM = gbxFrais.Controls.Find("M" + i, true);
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 5 mai 2011 à 11:04
Oups, désolé
Comme plusieurs contrôles peuvent avoir le même Name, la fonction Find() renvoie un tableau de contrôles.
Il suffit de rajouter [0] comme suit :
Control lbl = gbxFrais.Controls.Find("F" + inum, true)[0];
Une méthode plus propre voudrait que tu testes dans un premier temps que le tableau comporte au moins un élément, mais si tu es rigoureux dans le reste du code il ne devrait pas y avoir de souci.
PS : l'erreur est quand même explicite, tu aurais pu trouver tout seul :p