2012-01-12 10 views
6

Sto cercando di disegnare elementi che alla fine di loro è un carattere * in rosso (e rimuovere quello * carattere) e disegnare altri elementi in colore nero.Listbox manual DrawItem grande dimensione carattere

questo è il mio codice:

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

anche DrawMode proprietà della casella di riepilogo è impostata su OwnerDrawVariable.

Il mio codice funziona correttamente quando il carattere di listbox è il carattere predefinito.

Ma quando cambio la dimensione del carattere da 8.25 (dimensione predefinita) a 14, metà del testo si disegna sulla casella di riepilogo. In questo modo: My listbox when size is 14!

Ma con la dimensione del carattere di default, tutto è corretto.

Qual è il problema?

risposta

6

si deve gestire l'evento MeasureItem e impostare l'altezza degli elementi là:

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

ho usato 'e.ItemHeight = listBox1.Font.Height,' e funziona bene. Grazie! –

+2

Eccellente, aggiornerò la mia risposta con il tuo commento in modo che non dipenda da un'ulteriore classe 'ListBoxFontItem' personalizzata. –

Problemi correlati