我有一个用户控件,带有一个名为panel1的面板。我在设计师视图中添加了它。 选择从下拉框选择,在这种情况下后,我两个标签添加到UserControl(mainAspects
有两个字符串):Foreach在用户控件上跳过一个控件
private void CreateLabelsForMainAspetcs(List<string> mainAspects)
{
int mainCount;
int firstLabelX;
int firstLabelY;
int addToFirstLabelY = 0;
mainCount = mainAspects.Count;
firstLabelX = 22;
firstLabelY = 149;
for (int i = 0; i < mainCount; i++)
{
Label mainAsp = new Label();
mainAsp.Text = mainAspects[i];
mainAsp.Location = new Point(firstLabelX, firstLabelY + addToFirstLabelY);
mainAsp.AutoSize = true;
Controls.Add(mainAsp);
addToFirstLabelY = addToFirstLabelY + 100;
}
}
后,当用户从下拉框的另一种选择,我想处置标签与此代码:
foreach (Control ctrl in this.Controls)
{
if (ctrl is Label)
ctrl.Dispose();
}
并创建新的与CreateLabelsForMainAspetcs(List<string> mainAspects)
。 但foreach循环只能通过panel1和第一个标签,退出后(跳过第二个标签)。
我在foreach循环之前检查了有多少个控件有this.Controls.Count.ToString()
用户控件:它说,uc有3个控件(用GetType()
函数我找到了一个面板和两个标签 - 所以它找到了每个控件)。
因此在第二次运行CreateLabelsForMainAspetcs(List<string> mainAspects)
之后,没有3个,而是4个控件。 1个面板和3个标签。
之后,如果我只希望显示一个标签:在List中运行处理代码和createlabel中的一个字符串 - 在usercontrol上只有一个标签,第二个disappers。但Controls.Count
说,有4个控件 - 1个面板和3个标签。你能帮忙吗,我做错了什么?
我错误地认为调用dispose什么都不做?由于控件中仍然有对要处理的标签的引用?也许从控件中删除标签,然后处理它。 – Sebastien