Как установить значения по умолчанию для свойств производного элемента управления? - PullRequest
1 голос
/ 31 января 2012

Я получил от ToolStripComboBox, чтобы создать тот, который инкапсулирует выпадающий список в процентах.Цель состоит в том, чтобы все проверки и анализ строки были получены в производном элементе управления.Родитель просто получает событие, когда выбранный процент изменился, и он может получить доступ к общедоступному целому числу для получения и установки процента.

У меня проблема в том, что в файле конструктора для родительского элемента управления, который я помещаюМой производный элемент управления постоянно добавляет полный набор строк с помощью метода ComboBox.Items.AddRange.В конструкторе для моего производного элемента управления у меня есть следующее:

foreach (int i in percentages)
{
    ComboBox.Items.Add(String.Format("{0}%", i));
}

Со временем эти значения накапливаются в файле конструктора много, много раз.Я не знаю, как сделать свойство Items скрытым, поскольку оно не виртуальное.Я хочу подавить этот файл моего конструктора.

Пример файла моего дизайнера:

this.zoom_cbo.Items.AddRange(new object[] {
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%",
"10%",
"25%",
"50%",
"75%",
"100%",
"150%",
"200%",
"300%",
"400%",
"600%",
"800%",
"1600%"});

Ответы [ 2 ]

1 голос
/ 31 января 2012

Поскольку это производный список, из которого пользователь просто выбирает, попробуйте добавить его в производное поле со списком, чтобы предотвратить сериализацию элементов:

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items
{
  get { return ((ComboBox)this).Items; }
}
1 голос
/ 31 января 2012

Возможно, вам следует добавлять только тогда, когда вы НЕ в режиме разработки, например:

if (this.DesignMode)
{
  // design time only stuff
}
else
{
  // runtime only stuff.
  foreach (int i in percentages)
  {
    ComboBox.Items.Add(String.Format("{0}%", i));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...