2009-10-31 2 views
0

내 웹 컨트롤의 속성을 디자이너 영역에 떨어 뜨릴 때 속성을 초기화하는 방법이 필요합니다. "초기화"하는 의미는 : 내 컨트롤에 Prop1 속성이있는 경우입니다. Prop1에 값을 할당해야하며이 값을 ASPx에서 유지해야합니다.디자인 타임에 웹 컨트롤 속성을 초기화하는 방법은 무엇입니까?

  1. 내 ControlDesigner에서 InitializeNewComponent 구현 :

    나는 다음과 같은 노력이 메소드가 호출되지 않습니다. 그것은 버그 같습니다.
  2. 내 ControlDesigner에서 초기화 구현 :이 메서드는 호출되지만 Visual Studio에서는이 단계에서 컨트롤의 속성을 변경할 수 없습니다.
  3. IComponentChangeService.ComponentAdded (컨트롤이 만들어 질 때마다 호출되는 것으로 가정 됨)에 대한 처리기를 만듭니다. 이 핸들러는 호출되지 않습니다.

내 질문 : 컨트롤 속성을 어떻게 초기화합니까?

추신 : 내 컨트롤의 속성을 설정하는 방법을 알고 있습니다.

PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.Component)["Prop1"]; 
descriptor.SetValue("Value"); 

편집 내가 재산

의 값을 결정하는 처리를 할 필요가 있기 때문에 내가 ToolBoxData을 사용할 수 없습니다 언급하는 것을 잊었다

: 나는 스마트 태그에 잘 작동 다음 코드를 사용하여

답변

1
[ToolboxData("<{0}:MyControl runat=\"server\" Prop1=\"Value\" />")] 
public class MyControl 
{ 
} 
+0

아 애애 ... 당신의 대답은 완벽하게 내 문제를 내가 설명하는 문제를 해결하지만. 내가 속성의 값을 결정하기 위해 처리해야하기 때문에이 솔루션은 유효하지 않음을 언급하는 것을 잊어 버렸습니다. 정적이 아닙니다. 어쨌든 감사와 upvoted. –

-1
descriptor.SetValue("Value"); 

이러한 방법은 없습니다. MSDN 나는 또한 알려진 유형의 속성을 설정하기 위해 리플렉션을 사용하는 이유를 실제로 이해하지 못하고 있습니까?

은 어쩌면 이것은 당신에게 조금 도움이 될 수 있습니다 A Crash Course on ASP.NET Control Development: Design-Time Features and Capabilities

+0

1) 예,이 방법이 존재합니다. 2) 리플렉션을 사용하지 않습니다. Visual Studio에서 ASPx와 PropertyGrid를 업데이트 할 수 있도록 ComponentModel을 사용하고 있습니다. –