panel1이라는 패널이있는 사용자 콘트롤이 있습니다. 디자이너보기에서 추가했습니다. 이 경우, 콤보 상자에서 옵션을 선택한 후 나는 (mainAspects
는 두 개의 문자열을 가지고) UserControl을 두 개의 레이블을 추가 : 사용자가 콤보 상자에서 다른 옵션을 선택할 때, 내가 레이블을 처분하고자하는사용자 콘트롤에 대한 컨트롤을 건너 뛰는 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();
}
으로 새 코드를 만듭니다. 그러나 foreach 루프는 panel1과 첫 번째 레이블 (두 번째 레이블을 건너 뛴 후)을 통해서만지나갑니다.
foreach 루프 앞에 usercontrol이 this.Controls.Count.ToString()
인 컨트롤이 몇 개 있는지 확인했습니다. uc에는 3 개의 컨트롤이 있습니다 (GetType()
함수로 하나의 패널과 두 개의 레이블을 발견하여 모든 컨트롤을 찾습니다).
따라서 CreateLabelsForMainAspetcs(List<string> mainAspects)
의 두 번째 실행 후 3 개가 아니지만 4 개의 컨트롤이 있습니다. 1 개의 패널 및 3 개의 레이블이 있습니다.
후에 하나의 lable 만 표시하려면 목록에서 한 문자열을 사용하여 처분 코드와 createlabel을 실행하십시오. usercontrol에는 하나의 레이블 만 있고 두 번째 레이블은 사라집니다. 그러나 Controls.Count
에는 4 개의 컨트롤 (1 개의 패널과 3 개의 라벨)이 있다고합니다. 내가 뭘 잘못했는지 도울 수있어?
처 음 호출에 아무 것도하지 않는다고 가정하는 것이 잘못 되었습니까? 컨트롤에 여전히 처분 할 레이블에 대한 참조가 있기 때문에? 어쩌면 컨트롤에서 레이블을 제거한 다음 폐기하십시오. – Sebastien