2012-01-12 25 views
6

Estoy tratando de dibujar elementos que terminan con un carácter * en rojo (y eliminar ese carácter *) y dibujar otros elementos en color negro.Listbox manual DrawItem tamaño de fuente grande

este es mi código:

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 
     } 
    } 

también DrawMode propiedad del cuadro de lista se establece en OwnerDrawVariable.

Mi código funciona bien cuando la fuente de listbox es la fuente predeterminada.

Pero cuando cambio el tamaño de fuente de 8.25 (tamaño predeterminado) a 14, la mitad del texto se dibuja en el cuadro de lista. como este: My listbox when size is 14!

Pero con el tamaño de fuente predeterminado, todo es correcto.

¿Cuál es el problema?

Respuesta

6

usted tiene que manejar el evento MeasureItem y ajustar la altura de los artículos allí:

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

he utilizado 'e.ItemHeight = listBox1.Font.Height;' y funciona bien. ¡Gracias! –

+2

Excelente, actualizaré mi respuesta con su comentario para que no dependa de una clase adicional personalizada 'ListBoxFontItem'. –

Cuestiones relacionadas