2008-10-02 8 views
9

.NET에서 내가 상속 된 컨트롤이 있습니다상속 된 .NET 컨트롤의 속성의 DefaultValue 변경

public CustomComboBox : ComboBox 

단순히 다른 값으로, DropDownStyle 속성의 기본값을 변경하려면 (ComboBoxStyle합니다. DropDownList)를 기본 클래스 (ComboBoxStyle.DropDown)에 지정된 기본 셀 외에도 ​​포함 할 수 있습니다.

하나는 그냥 생성자를 추가 할 수 있습니다 생각할 수 있습니다 :

public CustomComboBox() 
{ 
    this.DropDownStyle = ComboBoxStyle.DropDownList; 
} 

그러나이 방법은 비주얼 스튜디오 디자이너를 혼동한다. Visual Studio에서 사용자 정의 컨트롤을 디자인 할 때 DropDownStyle에 대해 ComboBoxStyle.DropDown을 선택하면 선택한 속성이 기본 ComboBox 클래스의 [DevaultValue()]에서 여전히 기본값이라고 생각하므로 그렇지 않습니다. customComboBox.DropDownStyle = ComboBoxStyle.DropDown 줄을 Designer.cs 파일에 추가합니다. 그리고 혼란스럽게도 화면이 의도 한대로 작동하지 않는다는 것을 알게됩니다.

음이 가상하지 않기 때문에 당신은 DropDownStyle 속성을 재정의 할 수 없습니다,하지만 당신은 할 수 :

[DefaultValue(typeof(ComboBoxStyle), "DropDownList")] 
public new ComboBoxStyle DropDownStyle 
{ 
     set { base.DropDownStyle = value; } 
     get { return base.DropDownStyle; } 
} 

을하지만 당신은 "새로운"선언을 사용하는 뉘앙스에서 문제로 실행됩니다. 시도해 보았고 Visual Studio 디자이너가이 접근법에서 혼란을 느끼고 ComboBoxStyle.DropDown (기본 클래스의 기본 설정)을 강제로 사용하는 것처럼 제대로 작동하지 않는 것 같습니다.

다른 방법이 있습니까? 상세 질문을 드려 죄송합니다. 자세히 설명하는 것은 어렵습니다. 작동처럼

답변

9

이 보인다 :

public class CustomComboBox : ComboBox 
{ 
    public CustomComboBox() 
    { 
     base.DropDownStyle = ComboBoxStyle.DropDownList; 
    } 

    [DefaultValue(ComboBoxStyle.DropDownList)] 
    public new ComboBoxStyle DropDownStyle 
    { 
     set { base.DropDownStyle = value; Invalidate(); } 
     get { return base.DropDownStyle;} 
    } 
} 
+5

그것은 부끄러운 그냥 속성을 추가 속성을 다시 구현하지 않고도이를 달성 할 수있는 방법이없는 것입니다. – Pondidum

관련 문제