상속 .NET 제어에서 속성의 기본값 변경
-
03-07-2019 - |
문제
.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;}
}
}