在继承.NET控件更改属性的默认值(Changing the DefaultValue of a p

2019-09-01 21:34发布

在.NET中,我有一个继承控制:

public CustomComboBox : ComboBox

我只是想,除了在基类(ComboBoxStyle.DropDown)指定默认的改变DropDownStyle属性的默认值,另一个值(ComboBoxStyle.DropDownList)。

有人可能会认为,你可以只添加的构造函数:

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

但是,这种方法会混淆在Visual Studio设计。 当设计在Visual Studio中的自定义控制,如果选择ComboBoxStyle.DropDown的DropDownStyle它认为你选择的物业仍然是默认值(从[DevaultValue()]在基ComboBox类),所以也没有一个customComboBox.DropDownStyle = ComboBoxStyle.DropDown行添加到Designer.cs文件。 和混淆的是,你会发现,随着预期一旦跑了屏幕不会做人。

那么你不能覆盖DropDownStyle属性,因为它不是虚拟的,但你可以这样做:

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

但随后你会遇到使用“new”声明的细微差别麻烦。 我已经尝试过了,它似乎并没有作为Visual Studio的设计师会从这种方式也和力ComboBoxStyle.DropDown(默认为基类)混淆的工作权利。

是否有任何其他方式做到这一点? 很抱歉的详细问题,很难详细描述。

Answer 1:

这看起来像它的工作原理:

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;}
    }
}


文章来源: Changing the DefaultValue of a property on an inherited .net control