В .net у меня есть унаследованный элемент управления:
public CustomComboBox : ComboBox
Я просто хочу изменить значение свойства DropDownStyle по умолчанию на другое значение (ComboBoxStyle.DropDownList), кроме значения по умолчанию, указанного в базовом классе (ComboBoxStyle.DropDown).
Можно подумать, что вы можете просто добавить конструктор:
public CustomComboBox()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
Однако этот подход смущает Visual Studio Designer. При разработке пользовательского элемента управления в Visual Studio, если вы выберите ComboBoxStyle.DropDown для DropDownStyle, он считает, что выбранное вами свойство по-прежнему является значением по умолчанию (из [DevaultValue()] в базовом классе ComboBox), поэтому он не добавьте строку customComboBox.DropDownStyle = ComboBoxStyle.DropDown в файл Designer.cs. И достаточно смутно, вы обнаружите, что экран не ведет себя так, как только вы когда-то побежали.
Ну, вы не можете переопределить свойство DropDownStyle, так как оно не является виртуальным, но вы можете сделать:
[DefaultValue(typeof(ComboBoxStyle), "DropDownList")]
public new ComboBoxStyle DropDownStyle
{
set { base.DropDownStyle = value; }
get { return base.DropDownStyle; }
}
но тогда вы столкнетесь с неприятностями из-за нюансов использования "новых" объявлений. Я пробовал это, и он, похоже, не работает правильно, поскольку дизайнер визуальной студии тоже путается с этим подходом и заставляет ComboBoxStyle.DropDown(по умолчанию для базового класса).
Есть ли другой способ сделать это? Извините за подробный вопрос, его сложно описать подробно.