我有一個用戶控件,帶有一個名爲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