Laden...

Wie kann ich Elemente aus einer List<Label> löschen?

Erstellt von wbach vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.107 Views
W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren
Wie kann ich Elemente aus einer List<Label> löschen?

Hallo Zusammen,
ich möchte eine unbekannte Anzahl an Textboxen durch einen click erstellen und durch einen weiteren wieder rauslöschen.
Das erstellen funktioniert mit folgendem Code:

private List<TextBox> CommentList;
bool toogleButton;

//pnl_WinCCOATypeCommentExpert ist ein Panel
//bu_WinCCOATypeVarComment ist ein Button

public Form1()
{
     .........


        private void bu_WinCCOATypeVarComment_Click(object sender, EventArgs e)
        {
            if (toogleButton == false)
            {
                bu_WinCCOATypeVarComment.FlatStyle = FlatStyle.Popup;
                pnl_WinCCOATypeComment.Visible = true; //Set the expert comment panel as visible
                toogleButton = true;
               
                CommentList = new List<TextBox>();
                for (int j = 0; j < nud_WinCCOATypeVarCount.Value; j++)
                {
                    TextBox check = new TextBox();
                    CommentList.Add(check);
                }
                TextBox[] commentListTb = CommentList.ToArray();

                for (int i = 0; i < nud_WinCCOATypeVarCount.Value; i++)
                {
                    decimal varNameCountDec = nud_WinCCOATypeVarCount.Value + nud_WinCCOATypeVarNum.Value;
                    int varNameCount = Decimal.ToInt32(varNameCountDec) + i;
                    commentListTb[i].BorderStyle = BorderStyle.FixedSingle;
                    commentListTb[i].Margin = new Padding(0, 0, 0, 0);
                    commentListTb[i].Text = tb_WinCCOATypeVarComment.Text;
                    commentListTb[i].Location = new System.Drawing.Point(186, 0 + i * 20);
                    commentListTb[i].Name = "Comment_" + tb_WinCCOATypeVarBegin + "_" + varNameCount.ToString() + "_" + tb_WinCCOATypeVarEnd;
                    commentListTb[i].Size = new System.Drawing.Size(275, 20);
                    pnl_WinCCOATypeCommentExpert.Controls.Add(commentListTb[i]);
                }                
            }
            else if (toogleButton == true)
            {
                bu_WinCCOATypeVarComment.FlatStyle = FlatStyle.Standard;
                pnl_WinCCOATypeComment.Visible = false; //Set the expert comment panel as visible
                toogleButton = false;

                //Hier sollen die erstelleten TextBoxen wieder gelöscht werden
            }
        }

Aber mit dem wieder löschen habe ich noch Probleme.
Kann mir jemand hierzu einen Tipp geben wie ich die estellten Objekte wieder löschen kann?

LG

W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren

Ok, ich habs.

foreach (TextBox test in CommentList)
                {
                    pnl_WinCCOATypeCommentExpert.Controls.Remove(test);
                }
4.942 Beiträge seit 2008
vor 6 Jahren

Hallo,

analog zu Controls.Add geht dies mit Controls.Remove.

PS: Im Titel schreibst du Label, in deinem Code sind es aber TextBoxen (ist codetechnisch trotzdem gleich 😉.

W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren

Danke für die Aufmerksamkeit. 😃
Ich habe den Code hier gekürzt, weil ich noch Labels und Textboxen nutze. Wollte nicht alles doppelt und dreichfach posten. Deshalb ist ein CopyPaste "fehler" hinzugekommen. 😄

4.942 Beiträge seit 2008
vor 6 Jahren

Wenn du alle Unterelemente eines Controls löschen möchtest, dann geht es auch kürzer mit Controls.Clear


control.Controls.Clear();

5.299 Beiträge seit 2008
vor 6 Jahren

Aber disposed das auch die entfernten Controls?
Weil sonst hätte man ja leicht ein schönes Memory-Leak.

Der frühe Apfel fängt den Wurm.

3.003 Beiträge seit 2006
vor 6 Jahren

Aber disposed das auch die entfernten Controls?
Weil sonst hätte man ja leicht ein schönes Memory-Leak.

Nein tut's nicht und ja, hätte man. MSDN hat extra ne dicke fette Warnung: Control.ControlCollection.Clear-Methode

Also Obacht 😉.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

4.942 Beiträge seit 2008
vor 6 Jahren

Natürlich greift auch hier der GC, wenn keine anderen Referenzen mehr darauf verweisen (und dann wird das Control ordentlich disposed - ist beim Remove auch nicht anders).