Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何使用动态创建的项重新加载表单_C#_Winforms_Visual Studio - Fatal编程技术网

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