如何在 C# WinForms 中使用 numericUpDown1 生成动态文本框和标签
本文关键字:动态 文本 标签 numericUpDown1 WinForms | 更新日期: 2023-09-27 18:17:18
我可以使用numericUpDown1动态创建文本框和标签,但是当用户想要减少要使用的文本框和标签的数量时,我不能递减。
这是我的代码:
TextBox textbox = new TextBox();
Point p = new Point(35, 40 * i);
textbox.Location = p;
textbox.Size = new System.Drawing.Size(219, 20);
textbox.Name = "txtbox_" + i;
textbox.Text = "txtbox_" + i;
gb_addPos.Controls.Add(textbox);
Label label = new Label();
Point q = new Point(5, 40 * i);
label.Location = q;
label.Size = new System.Drawing.Size(21, 15);
textbox.Name = "label_" + i;
label.Text = i + ".)";
gb_addPos.Controls.Add(label);
i++;
Size r = new Size(259, 50 * j);
gb_addPos.Size = r;
j++;
感谢您花时间帮助像我这样的初学者。非常感谢...
我真的不喜欢仅通过控件的名称动态添加和删除。我喜欢做的是自己管理控件列表,并使用实际控件调用Add
或Remove
:
private readonly List<TextBox> _txts = new List<TextBox>();
// Then you can add a textbox with:
TextBox txt = // init a new textbox
this._txts.Add(txt);
this.Controls.Add(txt);
// And remove with:
this.Controls.Remove(this._txts[i]);
this._txts.RemoveAt(i);
我特别喜欢这种方法的原因是,如果你想像对待它一样对待它,它不会强迫你Control
拆箱到TextBox
中。但更大的原因是,您实际上是自己管理阵列TextBox
。如果您有一个不是动态创建的TextBox
,该怎么办?那会把事情搞砸。
// looping over textboxes:
foreach (var txt in this._txts)
{
// txt is TextBox
// With the normal approach you would have to write:
// foreach (var txt in this.Controls.OfType<TextBox>())
}
gb_addPos.Controls.remove("txtbox_" + I(;