Как установить значения по умолчанию для свойств производного элемента управления?
Я получил от 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 ответа
Поскольку это производный список, из которого пользователь просто выбирает, попробуйте добавить его в производное поле со списком, чтобы предотвратить сериализацию элементов:
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items
{
get { return ((ComboBox)this).Items; }
}
Возможно, вы должны делать добавление только тогда, когда вы НЕ находитесь в режиме разработки, например:
if (this.DesignMode)
{
// design time only stuff
}
else
{
// runtime only stuff.
foreach (int i in percentages)
{
ComboBox.Items.Add(String.Format("{0}%", i));
}
}