Вам не нужно менять FlatStyle
на Popup или Flat, чтобы эта работа работала.И вы, вероятно, не хотите делать это в первую очередь, потому что эти стили выглядят очень уродливо по сравнению с остальным интерфейсом вашего приложения.Родные элементы управления Windows используют внешний вид в стиле 3D;стили Flat и Popup предназначены для веб-приложений или приложений Windows Mobile, где они лучше подходят.
Я предполагаю, что вы задаете этот вопрос, поскольку вы уже написали код для изменения цвета текста на переднем плане.отображается в поле со списком, но заметили, что он не работает в Windows Vista или более поздней версии.Это связано с тем, что когда стиль комбинированного списка DropDownList
изменился и стал больше походить на кнопку в этих версиях Windows, он также потерял поддержку пользовательского цвета текста.Вместо этого выделенный текст всегда отображается в стандартном цвете «Текст окна».Сравните стиль DropDownList
со стандартным комбинированным списком в стиле DropDown
:
![Comparing the DropDownList style to the DropDown style under Windows Vista or later](https://i.stack.imgur.com/zCO70.png)
Визуально два комбинированных списка выглядят одинаково в более ранних версиях Windows, но не в Vista и более поздних, Ключом к отображению вашего собственного цвета переднего плана является изменение свойства DropDownStyle
вашего элемента управления со списком на DropDown
(что на самом деле является значением по умолчанию).
Я также хотел бы установить для свойства FlatStyle
значение System
, чтобы получить все изящные эффекты постепенного появления и исчезновения, предлагаемые встроенными элементами управления Windows.Стиль Standard
пытается эмулировать эти эффекты в управляемом коде, но он не совсем подходит.Я забочусь о мелочах.
Тогда вы можете использовать следующий код (как первоначально предложено в ответе Адриана):
public Form1()
{
InitializeComponent();
// Set custom combobox styles
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
comboBox1.FlatStyle = FlatStyle.System;
// Attach relevant event handler methods
comboBox1.DropDown += new EventHandler(comboBox1_DropDown);
comboBox1.DropDownClosed += new EventHandler(comboBox1_DropDownClosed);
}
void comboBox1_DropDown(object sender, EventArgs e)
{
// Optionally, revert the color back to the default
// when the combobox is dropped-down
//
// (Note that we're using the ACTUAL default color here,
// rather than hard-coding black)
comboBox1.ForeColor = SystemColors.WindowText;
}
void comboBox1_DropDownClosed(object sender, EventArgs e)
{
// Change the color of the selected text in the combobox
// to your custom color
comboBox1.ForeColor = Color.Red;
}
Чтобы произвести следующий эффект:
![ComboBox showing selected text in red](https://i.stack.imgur.com/Nlv0V.png)