问候溢出用户,
我创建了一系列自定义 ComboBox 控件,它们应该始终具有硬编码项。自定义控件还具有 GetEnum 属性,用于返回与所选项目等效的 Enum。
此控件的简单示例是 ComboBox_Boolean 版本。
public partial class ComboBox_Boolean : ComboBox
{
public ComboBox_Boolean()
{
Initialize();
}
public void Initialize()
{
this.Items.Clear();
foreach (string b in (new string[] { ">", ">=", "<=", "<", "=", "!="}))
this.Items.Add(b);
this.SelectedIndex = 0;
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
public BooleanType SelectedBoolean() { Get{//foo} Set{//foo}}
}
public Enum BooleanType {LT, LE, GE, GT, EQ, NE}
现在,这相当简单,而且似乎工作得很好。
奇怪的是,设计师似乎注意到了这一点,并在设计师级别再次添加了这些项目。对于额外的怪异,它似乎在我第一次构建或打开设计视图时添加了项目。我还没有完全弄清楚模式。
不管怎样,重点是,设计代码最终会得到这个语句:
this.myBooleanDropDown.Items.AddRange(new object[] {
">",
">=",
"=",
"<=",
"<",
"!=",
">",
">=",
"=",
"<=",
"<",
"!="});
当然,这很烦人。我的问题有两个部分:
1)为什么会这样?
2)我该如何预防?
我尝试覆盖 this.Items 属性并将其设为私有,或以其他方式使其不起作用,但这给出了错误。我打算与此自定义控件交互的唯一方法是通过 SelectedBoolean 属性。