[英]Changing the DefaultValue of a property on an inherited .net control
在.net中,我有一個繼承的控件:
public CustomComboBox : ComboBox
我只是想將DropDownStyle屬性的默認值更改為另一個值(ComboBoxStyle.DropDownList),除了在基類(ComboBoxStyle.DropDown)中指定的默認值。
有人可能認為你可以添加構造函數:
public CustomComboBox()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
但是,這種方法會使Visual Studio Designer感到困惑。 在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; }
}
但是你會因使用“新”聲明的細微差別而遇到麻煩。 我已經嘗試了它,它似乎不正常,因為視覺工作室設計師也從這種方法混淆並強制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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.