Подтвердить что ты не робот

Как изменить цвет фона combobox (а не только часть выпадающего списка)

В приложении winform, запущенном в Windows 7, я хочу, чтобы цвет фона выделенной области был выделен. В comboxbox есть DropDownStyle из DropDownList.

Когда я программно изменяю свойство BackColor на Red, только фон фактического выпадающего списка изменяется на красный. Когда раскрывающийся список не открывается, фон со списком, отображающий выбранное значение, остается серым. Что я могу сделать, это тоже становится красным?

Настройка свойства BackColor отлично работает, когда приложение запущено в Windows XP

4b9b3361

Ответ 1

Это должно помочь вам начать.

Измените свойство DrawMode combobox на OwnerDrawFixed и обработайте событие DrawItem:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    int index = e.Index >= 0 ? e.Index : 0;
    var brush = Brushes.Black;
    e.DrawBackground();
    e.Graphics.DrawString(comboBox1.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault);
    e.DrawFocusRectangle();
}

Цвет фона будет правильным, но стиль окна будет плоским, а не обычным 3D-стилем.

Ответ 2

Так как вы теряете 3D-эффекты в любом случае с помощью решения Igby Largeman, вам лучше изменить свойство FlatStyle на Flat. Цвет фона, кажется, соблюдается даже в Windows 7 таким образом и без повторной реализации каких-либо событий низкого уровня.

Я бы рассмотрел эту ошибку в части Microsoft...