C#如何使用动态创建的项重新加载表单
我的主窗体为列表中的每个条目动态创建列表框。通过点击右上角的按钮,我得到一个小表单来创建一个新条目。如果我关闭表单,应该创建一个新的文本框,但是我不能只调用创建列表框的方法,因为它将绘制重复项。有没有一种方法可以刷新整个表单而不关闭它并创建一个新表单 文本框代码C#如何使用动态创建的项重新加载表单,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我的主窗体为列表中的每个条目动态创建列表框。通过点击右上角的按钮,我得到一个小表单来创建一个新条目。如果我关闭表单,应该创建一个新的文本框,但是我不能只调用创建列表框的方法,因为它将绘制重复项。有没有一种方法可以刷新整个表单而不关闭它并创建一个新表单 文本框代码 foreach (Uitslag u in geselecteerdeVerkiezing.uitslagen) { CreateDynamicTextBox(x, y, u); UpdatePositionManage
foreach (Uitslag u in geselecteerdeVerkiezing.uitslagen)
{
CreateDynamicTextBox(x, y, u);
UpdatePositionManager(ref x, ref y, ref PositionManager);
}
private void CreateDynamicTextBox(int x, int y, Uitslag u)
{
TextBox textBox = new TextBox();
textBox.Location = new Point(x, y);
textBox.Size = new Size(220, 100);
textBox.Multiline = true;
textBox.ReadOnly = true;
textBox.Text = ("Verkiezing: " + geselecteerdeVerkiezing.Naam + Environment.NewLine + "Uitslag: " + u.Naam + Environment.NewLine + "Aantal zetels: " + +geselecteerdeVerkiezing.AantalZetels + Environment.NewLine + "Zetels voor meerderheid: " + geselecteerdeVerkiezing.Meerderheid + Environment.NewLine + "Aantal deelnemende partijen: " + u.DeelnemendePartijen.Count);
textBox.Name = u.Naam;
textBox.MouseClick += new MouseEventHandler(textBox_Click);
this.Controls.Add(textBox);
}
如果你想删除所有文本框,我想你可以这样做(没有时间测试):
var textboxs=this.Controls.Cast()。其中(r=>r是TextBox.ToArray();
foreach(文本框中的var textBox)
{
textBox.Dispose();
}
您还可以在
.Where()
或ForEach
本身中按名称检查它们 所以。。。删除现有控件?你的意思是?@EpicKip也这么认为,但很难找到像你创建的是文本框,而不是列表框。我可以删除所有现有的文本框控件吗?这是我第一次使用dynamicly createdobjects@TomLimpens如果英语对您来说很难,您可以用荷兰语发表评论,我可以阅读/翻译。这不会丢弃控件。@LarsTech Thank Letter;)您必须在文本框声明的末尾添加一个.ToArray()
,因为在for each期间无法修改枚举。目前,您的代码不会删除列表中的所有控件。您还可以删除控件。删除(textBox)
行,因为Dispose将为您执行此操作。我认为这会起作用,但我在测试时发现了一个更深层次的问题。我给了一个带有这个表单的对象,它有一个创建文本框的对象列表,所以我需要在更新表单之前更新这个列表。谢谢,不过它可能适用于列表中的现有对象。@TomLimpens如果这解决了问题中提出的问题,请接受,以便其他人可以使用它
var textBoxes = this.Controls.Cast<Control>().Where(r => r is TextBox).ToArray();
foreach (var textBox in textBoxes)
{
textBox.Dispose();
}