2012-02-22 2 views
0

나는 ToolStripLabel에서 상속하는 것을 시도하고있다 :생성자에서 컨트롤 속성을 설정하는 방법 (디자이너 문제)

public class SeparatorLabel : ToolStripLabel 
{ 
    public SeparatorLabel() : base() 
    { 
     Margin = new Padding(5, 0, 5, 0); 
     Text = "ABC"; 
    } 
} 

을 그러나, 나는 형태에 이러한 컨트롤을 배치하는 경우는 Text 속성은에서 가져온 것입니다 디자이너의 속성 표에 입력 된 값.

속성 그리드의 속성 (양식 InitializeComponent())이 설정되기 전에 내 생성자가 호출되어 내 값이 덮어 쓰여지므로 이는 물론 예상됩니다.

질문은 - 무엇입니까? 기존 컨트롤에서 상속 할 때 이러한 동작을 달성하기위한 표준 연습은 무엇입니까?

나는 그것이 빈 세터를 포함하도록 Text 속성을 재정의 할 수 있었고, 내가 컨트롤의 Text를 업데이트 할 때, 내가 수동으로 base.Text을 설정 구현 않았다 방법 :

public class SeparatorLabel : ToolStripLabel 
{ 
    public SeparatorLabel() : base() 
    { 
     Margin = new Padding(5, 0, 5, 0); 
     base.Text = "ABC"; 
    } 

    [Browsable(false)] 
    public override string Text 
    { 
     get 
     { 
      return base.Text; 
     } 
     set { } 
    } 
} 

이 작동하지만 나는 그것이 최선의 방법인지 확실하지 않습니다. 내가 필요로하는 것을 달성하기위한 더 일반적인 방법이 있습니까?

답변

0

생성자가 클래스와 다르기 때문에 예제가 컴파일되지 않습니다.

DesignerSerializationVisibility 속성을보고 Hidden으로 설정할 수도 있습니다.

public SeparatorLabel() { 
    base.Margin = new Padding(5, 0, 5, 0); 
} 

[Browsable(false)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public new Padding Margin { 
    get { return base.Margin; } 
    set { 
    throw new Exception("This property is read only."); 
    } 
} 
+0

내 예제에서 오류를 바로 잡았습니다 (코드에서 직접 복사하지 않았기 때문에 유효하지 않은 생성자 이름). –

관련 문제