Supprimer une ligne d'objet dynamique [Résolu]

Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 mai 2012
- 5 mai 2011 à 08:55 - Dernière réponse :
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 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());
        }
    }


Merci de votre aide!

Azevedo Stéphane
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 5 mai 2011 à 09:43
3
Merci
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 :
gbxFrais.Controls.Find("leNameEnQuestion", true);

Merci cs_jopop 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_jopop
Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 5 mai 2011 à 10:33
3
Merci
Dans ta boucle for tu rajoutes :
lblFrais[iNombre].Name =  "F" + iNombre;
btnSupprimer[iNombre].Name = "X" + iNombre;
btnModifier[iNombre].Name = "M" + iNombre;

Comme ça tu pourras les identifier.

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);

Puis de les supprimer :
gbxFrais.Controls.Remove(lbl);
gbxFrais.Controls.Remove(btnX);
gbxFrais.Controls.Remove(btnM);

Merci cs_jopop 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_jopop
Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 5 mai 2011 à 11:04
3
Merci
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

Merci cs_jopop 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_jopop
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 mai 2012
- 5 mai 2011 à 10:26
0
Merci
Merci =)

cela veux dire que s'est la meme chose pour mon label!!!

je comprends pas comment faire...

pourais-tu m'aider?

Stéphane Azevedo
Commenter la réponse de AzevedoSt27
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 mai 2012
- 5 mai 2011 à 10:39
0
Merci
Merci

S'est ce qu'il me fallait

Une bonne journée et a une prochaine!

Azevedo Stéphane
Commenter la réponse de AzevedoSt27
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 mai 2012
- 5 mai 2011 à 11:00
0
Merci
Re!

Il m'affiche une erreur =( : System.Windows.Form.Control[] en System.Windows.Form.Control

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

Control lbl = gbxFrais.Controls.Find("F" + inum, true);
Control btnX = gbxFrais.Controls.Find("X" + inum, true);
Control btnM = gbxFrais.Controls.Find("M" + inum, true);

gbxFrais.Controls.Remove(lbl);
gbxFrais.Controls.Remove(btnX);
gbxFrais.Controls.Remove(btnM);
}

j'ai esseillé de rejouter des crochets mais ensuite j'ai des erreurs sur les 3 dernieres ligne...

Merci!

Azevedo Stéphane
Commenter la réponse de AzevedoSt27
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 5 mai 2011 à 11:06
0
Merci
T'as une erreur avec cette méthode (avec les crochets) ?
Je viens de la tester et j'ai aucun souci.
Commenter la réponse de cs_jopop
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Dernière intervention
27 mai 2012
- 5 mai 2011 à 11:15
0
Merci
j'avais esseillé mais je l'avais placer a la mauvaise place

Merci pour ton aide

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.