Привет пользователям переполнения,
Я создал серию пользовательских элементов управления 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.