Это происходит потому, что конструктор также выполняется во время разработки.Поэтому, как только вы поместите свой пользовательский комбинированный список в форму, он сразу же заполняется 4 значениями.Которые затем сохраняются в методе InitializeComponent () формы.Когда вы в следующий раз запустите свою форму, ваш конструктор снова будет выполнен, добавив 4 значения в комбинированный список, затем InitializeComponent добавит еще 4.
Несколько способов исправить это, но чистые довольно болезненны.Безусловно, самый простой способ - отложить добавление этих элементов до тех пор, пока вы не сможете проверить свойство DesignTime:
class MyComboBox : ComboBox {
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
if (this.Items.Count == 0) {
this.Items.Add("myValue");
this.Items.Add("myValue2");
this.Items.Add("myValue3");
this.Items.Add("myValueN");
}
}
}
Если нет возможности редактировать элементы в раскрывающемся списке, то это лучшее решение:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public new ObjectCollection Items {
get { return base.Items; }
}