2012-01-12 4 views
6

Я пытаюсь нарисовать элементы, что их конец - это символ * в красном (и удалить этот символ *) и нарисовать другие предметы черного цвета.Listbox manual DrawItem большой размер шрифта

это мой код:

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 свойство ListBox устанавливается в OwnerDrawVariable.

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

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

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

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

ответ

6

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

private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) 
{ 
    e.ItemHeight = listBox1.Font.Height; 
} 
+2

я использовал 'e.ItemHeight = listBox1.Font.Height;' и он работает хорошо. Благодаря! –

+2

Отлично, я обновляю свой ответ с вашим комментарием, чтобы он не зависел от дополнительного пользовательского класса ListBoxFontItem. –

Смежные вопросы