对于我的一个项目,我继承了一个ComboBox来更改其大小行为。除此之外,我还想加快表单的创建速度,将默认的DropDownStyle
设置为ComboBoxStyle.DropDownList
为此,我使用了[Default()]
命令覆盖DropDownStyle
属性
[DefaultValue(ComboBoxStyle.DropDownList)]
public new ComboBoxStyle DropDownStyle
{
get
{
return base.DropDownStyle;
}
set
{
base.DropDownStyle = value;
}
}
然后,我在设计器中修改了默认值,将
DropDownStyle
设置为ComboBoxStyle.DropDownList
。问题来了...
我想拥有
ComboBoxStyle.DropDown
的数量很少,因为他们需要使用InheritedComboBoxAutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
如果我从Designer设置它,则可以正常工作,但是,有时候,在我重建表单之后,它会抛出一个有关ComboBoxStyle的异常(也在设计时)。当我查看FormName.Designer.cs文件时,我可以发现对于特定的InheritedComboBox,没有
DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown
我必须手动添加
这有点无聊,因为有时我只是在运行时注意到它,当程序在不显示表单的情况下引发异常,并且每次重建时我都无法测试每种表单...
你知道我为什么会表现出这种奇怪的行为吗?
有什么办法可以解决?
非常感谢您的回答!
最佳答案
当您设置AutoCompleteMode
或AutoCompleteSource
属性时,我相信设计人员正在寻找基本的ComboBox,而不是生成用于设置DropDownStyle
的行,因为DropDown
是ComboBox的默认值。
我可以通过在继承的ComboBox中添加AutoCompleteMode
和AutoCompleteSource
属性来纠正此问题,但是由于设计者设置属性的顺序,还必须添加一行以设置基本DropDownStyle
。
尝试这样的事情,看看它是否适合您:
public class MyComboBox : ComboBox
{
public MyComboBox()
{
DropDownStyle = ComboBoxStyle.DropDownList;
AutoCompleteMode = AutoCompleteMode.None;
AutoCompleteSource = AutoCompleteSource.None;
}
[DefaultValue(ComboBoxStyle.DropDownList)]
public new ComboBoxStyle DropDownStyle
{
get { return base.DropDownStyle; }
set { base.DropDownStyle = value; }
}
[DefaultValue(AutoCompleteMode.None)]
public new AutoCompleteMode AutoCompleteMode
{
get { return base.AutoCompleteMode; }
set
{
if (value != AutoCompleteMode.None)
base.DropDownStyle = ComboBoxStyle.DropDown;
base.AutoCompleteMode = value;
}
}
[DefaultValue(AutoCompleteSource.None)]
public new AutoCompleteSource AutoCompleteSource
{
get { return base.AutoCompleteSource; }
set
{
if (value != AutoCompleteSource.None)
base.DropDownStyle = ComboBoxStyle.DropDown;
base.AutoCompleteSource = value;
}
}
}