在.NET中,我有一個繼承控制:上繼承.NET控件更改屬性的默認值
public CustomComboBox : ComboBox
我只是想更改DropDownStyle屬性的默認值,另一個值(ComboBoxStyle。 DropDownList)除了在基類(ComboBoxStyle.DropDown)中指定的默認值之外。
有人可能會認爲你可以添加構造:
public CustomComboBox()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
但是,這種方法會混淆在Visual Studio設計。在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; }
}
但隨後你會遇到麻煩使用「new」聲明的細微差別。我試過了,它似乎並沒有正常工作,因爲視覺工作室設計師也從這種方法中感到困惑,並強制ComboBoxStyle.DropDown(基類的默認設置)。
有沒有其他方法可以做到這一點?對於詳細的問題抱歉,很難詳細描述。
這是一個恥辱有沒有辦法做到這一點,而無需重新實現屬性只是添加屬性。 – Pondidum 2009-10-07 12:45:57