2009-09-17 2 views
5

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 오전 궁금하지만, 거기가 더 나은 방법을, 또는 경우 (여러 번로드 이벤트 핸들러를 구현하기 위해 갖는 다른?)

+0

매우 도움이됩니다. 감사합니다. –

답변

2

때문에 함께 문제의이 패턴에 대한 냄새 나는 뭔가가있는 경우 중첩 된 컨트롤 (및 관련된 문제) DesignMode 속성을 사용하여이 문제에 대한 내 일반적인 접근 방식을 디자인 모드에서 작동하도록 내 사용자 지정 UserControls 얻으려고 심지어 것입니다. 일반적으로 내 컨트롤은 매우 복잡하고 소유자가 직접 그리기 때문에 DesignMode가 중첩 컨트롤로 작업하더라도 디자인 모드에서 의미있는 것을 보여주기 위해서는 많은 프로그래밍 작업이 필요합니다. 컨트롤은 상당한 양의 초기화 및 설정 시간을 필요로합니다.

일반적으로 모든 작업을 수행하는 공용 Setup() 또는 LoadData() 메서드를 추가하고 런타임에만이 메서드를 호출합니다. 디자인 모드에서 다음, UserControl 그냥 정사각형으로, 그게 더 아무것도 배치하는 데 도움이 나타납니다.

그러나이 질문에 대한 다른 대답을 얻었 으면보고 싶습니다. 문제가 해결 될 수도 있습니다.

+0

디자인 뷰에서 컨트롤을 볼 수있는 것이 특히 편리합니다. 특히 하위 클래스로 만들려는 경우에 유용합니다. 그렇지 않다면, 폼의 컨트롤 레이아웃을위한 프레임이 적어도 괜찮습니다 (여러분이하는 것처럼). 컨트롤이 많은 표준을 사용하고 컨트롤의 구성 요소의 위치, 속성 또는 이벤트 처리기로 조정해야하는 경우 사실적인 디자인보기가 중요 해집니다. 게다가, 내 컨트롤이 코드를 가지고 있지 않은 사람에 의해 사용될 수 있다는 것을 아는 것이 보람이라고 생각합니다. :) –

+0

@Sam : 당신이 말하는 모든 것에 완전히 동의합니다. 때로는 컨트롤이 디자인 모드로 작동하도록 노력할 때가 있습니다. 내가 심각한 문제에 부딪히자 마자 나는 가끔씩 빠져 나간다. – MusiGenesis

관련 문제