在 .NET 中,我拥有一个继承的控件:
由于DropDownStyle属性不是虚拟的,因此您无法覆盖它,但您可以执行以下操作:
public CustomComboBox : ComboBox
我只是想更改DropDownStyle属性的默认值为另一个值(ComboBoxStyle.DropDownList),而不是基类中指定的默认值(ComboBoxStyle.DropDown)。
有人可能会认为你可以添加构造函数:
public CustomComboBox()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
然而,这种方法会使Visual Studio Designer混淆。在Visual Studio中设计自定义控件时,如果您选择ComboBoxStyle.DropDown作为DropDownStyle,则它会认为您选择的属性仍然是默认值(来自基础ComboBox类中的[DefaultValue()]),因此它不会将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(基类的默认设置)。
有其他的解决方法吗?抱歉问题描述较为冗长,很难详细说明。