.net(C#) WinForm 개발은 시각적 디자인이기 때문에 수동으로 디자인 인터페이스에 필요한 구성 요소를 직접 추가할 수 있으며, .net은 을 포함하여 이 구성 요소를 자동으로 초기화합니다. InitilizeComponent()에 속성 설정 등이 추가되며 해당 상위 컴포넌트에 이 컴포넌트가 추가됩니다. 이 모든 작업은 .net에 의해 자동으로 수행됩니다.
그러나 일부 시나리오에서는 구성 요소가 속한 상위 컨테이너를 변경하기 위해 코드를 수동으로 작성해야 합니다. 예를 들어 일부 구성 요소는 원래 상위 컨테이너 A에 속했지만 이러한 구성 요소를 상위 컨테이너 B로 조정하려고 합니다. 이때 흥미로운 문제가 발생합니다.
다음 3개의 구성 요소가 원래 여기에 있었습니다.
this.Controls.Add(this.operRateUC); this.Controls.Add(this.personProductUg); this.Controls.Add(this.procedingPanel);
는 이 3개의 구성 요소를 adjustPanel 구성 요소로 조정하려고 합니다. 다음 코드에 표시된 대로:
private void moveToAdjustPanel() { //AdjustablePanel是一个Control类 AdjustablePanel adjustPanel = new AdjustablePanel(); foreach (Control ultraControl in this.Controls) { if (ultraControl.GetType() == typeof(UltraGrid) || ultraControl.GetType() == typeof(UltraChart) || ultraControl.GetType() == typeof(Panel)) { adjustPanel.Controls.Add(ultraControl); } } }
구성 요소를 다른 상위 구성 요소로 일괄 이동하는 이 방법은 실패합니다.
adjustPanel이 새 구성요소를 추가할 때마다 this.Controls의 구성요소가 변경되고 foreach 반복자가 수정되는 예외는 발생하지 않습니다. 이것이 Microsoft 버그인지는 모르겠습니다.
도움을 위해 bbs.csdn.net에 게시하고 응답했습니다. 대부분의 사람들은 foreach 순회가 오류를 보고할 것이라고 생각했지만 실제로 컴파일러는 어떤 예외도 발생시키지 않았습니다. 컴파일러를 다시 실행하고 간단한 테스트를 실행한 결과 foreach 순회에서는 오류가 보고되지 않았지만 원하는 결과를 얻을 수 없었습니다.
이상한 점:
foreach 반복자가 수정되었는데 왜 오류를 보고하지 않습니까? ? ?
왜 버튼2만 그룹박스1로 이동하나요? ? ?
위 내용은 .NET Framework - Winform 기술의 컨테이너가 참조하는 구성 요소 트랩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!