Руководство по списку DrawItem большой размер шрифта - PullRequest
9 голосов
/ 12 января 2012

Я пытаюсь нарисовать элементы, которые заканчиваются на нем символом * красным (и удалите этот символ *), и нарисуйте другие элементы черным цветом.

это мой код:

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground() ; //Draw our regular background
        if (Microsoft.VisualBasic.Strings.Right(listBox1.Items[e.Index].ToString(), 1) == "*")
        {
            e.Graphics.DrawString(Microsoft.VisualBasic.Strings.Mid(listBox1.Items[e.Index].ToString(),1,listBox1.Items[e.Index].ToString().Length - 1), e.Font, Brushes.Red, e.Bounds);    //Draw the item text in red!
        }
        else
        {
            e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds); //Draw the item text in its regular color
        }
    }

Также DrawMode свойство списка имеет значение OwnerDrawVariable.

Мой код работает нормально, когда шрифт списка является шрифтом по умолчанию.

Но когда я изменяю размер шрифта с 8,25 (размер по умолчанию) на 14, половина текста рисуется в списке.как это: My listbox when size is 14!

Но с размером шрифта по умолчанию все правильно.

В чем проблема?

1 Ответ

8 голосов
/ 12 января 2012

Вы должны обработать событие MeasureItem и установить высоту элементов там:

private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
     e.ItemHeight = listBox1.Font.Height;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...