ListBox цвет фокуса

398
13 января 2017, 07:03

Как изменить цвет фона выделения и цвет текста в ListBox'e?

Пробовал через DrawMode, но там цвет текста изменяет везде, а мне нужно поменять только у фокуса

Answer 1

Для этого нужно :

  • переопределить событие Drawitem

  • установить свойству DrawMode значение DrawMode.OwnerDrawFixed


Пример обработчика события Drawitem :

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index<0) return;
    // задаем параметры для рисования текущего элемента
    // Если элемент имеет состояние 'выбран' мы изменяем цвет его кисти бэкграунда на желтую, 
    //остальные параемтры оставим по умолчанию взятые из параметра `e`
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        e = new DrawItemEventArgs(e.Graphics, 
                                  e.Font, 
                                  e.Bounds, 
                                  e.Index,
                                  e.State ^ DrawItemState.Selected,
                                  e.ForeColor, 
                                  Color.Yellow);// <- обратить внимание сюда
    // Начинаем рисовать
    // Рисуем Background для каждого элемента
    e.DrawBackground();
    // Рисуем текст для каждого элемента
    e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
    // если у текущеного элемента есть фокус, эта функция нарисует фокус
    e.DrawFocusRectangle();
}

Вот еще один пример из документации https://msdn.microsoft.com/en-gb/library/system.windows.forms.drawmode(v=vs.110).aspx

READ ALSO
Как читать XML из строки?

Как читать XML из строки?

XML опытный образец:

341
Приведение JSON модели к Dictionary

Приведение JSON модели к Dictionary

Возникла проблема, при тестировании методов restAPI

338
Остановка скрипта php

Остановка скрипта php

Как реализовать паузу во время появления формы капчи, потом после ввода капчи, продолжение работы

361