.NET Framework - Winform 기술의 컨테이너가 참조하는 구성 요소 트랩에 대한 자세한 설명

黄舟
풀어 주다: 2017-03-20 11:48:08
원래의
1437명이 탐색했습니다.

 .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 순회에서는 오류가 보고되지 않았지만 원하는 결과를 얻을 수 없었습니다.


.NET Framework - Winform 기술의 컨테이너가 참조하는 구성 요소 트랩에 대한 자세한 설명

테스트 코드는 다음과 같습니다. 여기서 2 Button 구성 요소를 groupBox1로 이동합니다. 그러나 결과적으로 여기에는 여전히 버튼1이 있고, 버튼2만 groupBox1로 이동되었습니다.

이상한 점:

foreach 반복자가 수정되었는데 왜 오류를 보고하지 않습니까? ? ?
왜 버튼2만 그룹박스1로 이동하나요? ? ?

아아아아

위 내용은 .NET Framework - Winform 기술의 컨테이너가 참조하는 구성 요소 트랩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!