【发布时间】:2020-03-22 05:18:42
【问题描述】:
我有一个视图,一旦用户单击按钮,就会生成一些标签和文本框。生成时,我将名称传递为“dynamic_something”并添加它
TextBox textBox = new TextBox();
textBox.Name = "dynamic_something";
this.Controls.Add(textBox);
当用户单击另一个按钮时,我想删除所有生成的字段。我遍历所有控件并在开始时找到具有动态的控件并删除,但所有字段都没有被删除。
foreach (Control currentControl in this.Controls)
{
if ((currentControl).Name.StartsWith("dynamic"))
{
Controls.Remove(currentControl);
}
}
我该如何解决这个问题?
【问题讨论】:
-
1) 不要尝试从您在
foreach循环中迭代的集合中删除对象。使用向后的for循环 2) 处理控件(currentControl.Dispose();,此处),不要使用Collection.Remove(Control)。处理控件也会将其从集合中删除。 -
@Jimi 在初始循环中,我将控件添加到列表中,并使用另一个循环使用 Dispose() 将其删除。它工作得很好。谢谢!您能否将此添加为答案,以便我接受。
-
它是(不够知名的)Removing dynamically created controls in C# 的副本。