В .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 (по умолчанию для базового класса).
Есть ли другой способ сделать это? Извините за подробный вопрос, его сложно описать подробно.