Forms 및 UserControls의 DesignMode 속성에 대한 여러 게시물과 질문을 보았습니다. 컨트롤이 디자인 모드에 있는지 (예 : 컨트롤이 Visual Studio Designer에 표시되는지) 확인하고 런타임에만 실행할 수있는 코드는 사용하지 않는 것이 좋습니다. 많은 사람들이 겪어 본 문제는 최근에 나에게도 노출 된 내 기억이 DesignMode 속성이 생성자에서 작동하지 않고 중첩 컨트롤에서 작동하지 않는다는 것입니다. 그러나 컨트롤이나 폼의 Load 이벤트 처리기에서 매우 잘 작동합니다!DesignMode 속성과 LicenseManager.UsageMode 사용
생각해 보면 Forms 또는 UserControls 생성자의 코드는 폼을로드 할 필요가없는 상태 만 처리해야합니다. UI 개체 초기화 코드는 컨트롤의 Load 이벤트 처리기에 있어야합니다. 그리고이 함수에서 DesignMode 속성이 작동합니다. 디자이너는 그 당시 적절한 값을 사용합니다.
원칙적으로 InitializeComponent() 메서드가 호출되었지만 실제로 디자인보기에서 컨트롤을 표시하면 Designer는 해당 함수를 구문 분석 만하고 실행하지는 않습니다. 그러나 디자이너는 중첩 컨트롤의 생성자를 실행합니다. 생성자에 초기화 코드를 반드시 넣어야하는 경우 System.ComponentModel.LicenseManager 클래스를 사용하면 DesignTime 또는 RunTime 값을 사용하는 UsageMode라는 정적 속성이 있습니다. 컨트롤의 생성자에서 해당 속성을 절대적으로 신뢰할 수 있지만 생성자에서만!
내가 지금 작업하고있는 응용 프로그램에서 그 작은 미묘함을 잊어 버렸습니다. 이 문제를 해결하기 위해 추가 초기화가 필요한 모든 컨트롤과 폼이 Load 이벤트에 대한 처리기를 구현해야한다는 패턴을 고수하고 있습니다. 저기, DesignMode 속성은 잘 작동합니다, 그리고 나는 디자이너에서 내 사용자 정의 컨트롤과 폼을 여는 데 어려움을 겪지 않습니다.
클래스 계층 구조가있는 경우 해당 이벤트 핸들러를 가상 보호하고 가끔 추가 초기화가 필요할 때만 재정의합니다.
I 오전 궁금하지만, 거기가 더 나은 방법을, 또는 경우 (여러 번로드 이벤트 핸들러를 구현하기 위해 갖는 다른?)
매우 도움이됩니다. 감사합니다. –