如何在 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++;

感谢您花时间帮助像我这样的初学者。非常感谢...

如何在 C# WinForms 中使用 numericUpDown1 生成动态文本框和标签

我真的不喜欢仅通过控件的名称动态添加和删除。我喜欢做的是自己管理控件列表,并使用实际控件调用AddRemove

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