문제

.NET에는 상속 된 제어가 있습니다.

public CustomComboBox : ComboBox

DropdownStyle 속성의 기본값을 기본 클래스 (Comboboxstyle.dropdown)에 지정된 기본값 외에 다른 값 (Comboboxstyle.dropdownList)으로 변경하려고합니다.

생성자를 추가 할 수 있다고 생각할 수도 있습니다.

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

그러나이 접근법은 Visual Studio Designer를 혼동 할 것입니다. Visual Studio에서 사용자 정의 컨트롤을 설계 할 때 DropdownStyle의 ComboBoxStyle.dropdown을 선택하면 선택한 속성이 여전히 기본값 (기본 ComboBox 클래스의 [DevaultValue ()]에서 기본값이라고 생각합니다. customcombobox.dropdownstyle = comboboxstyle.dropdown 줄을 Designer.cs 파일에 추가하십시오. 그리고 혼란스럽게도, 당신은 화면이 일단 실행 된대로 행동하지 않는다는 것을 알게됩니다.

드롭 다운 스타일 속성은 가상이 아니기 때문에 드롭 다운 스타일 속성을 무시할 수는 없지만 할 수 있습니다.

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

그러나 "새로운"선언을 사용하는 뉘앙스에서 문제가 발생합니다. 나는 그것을 시도했지만 Visual Studio Designer 가이 접근법에서 혼란스러워지고 Comboboxstyle.dropdown (기본 클래스의 기본값)을 강요함에 따라 제대로 작동하지 않는 것 같습니다.

이것을 할 다른 방법이 있습니까? 장황한 질문에 대해 죄송합니다. 자세히 설명하기가 어렵습니다.

도움이 되었습니까?

해결책

이것은 작동하는 것처럼 보입니다.

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;}
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top