簡體   English   中英

更改繼承的.net控件上的屬性的DefaultValue

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM