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
Ok, ich habs.
foreach (TextBox test in CommentList)
{
pnl_WinCCOATypeCommentExpert.Controls.Remove(test);
}
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 😉.
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. 😄
Wenn du alle Unterelemente eines Controls löschen möchtest, dann geht es auch kürzer mit Controls.Clear
control.Controls.Clear();
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.
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)
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).