2012-01-12 11 views
6

私はそれらの最後に*文字が赤で(そしてその*文字を取り除いて)黒い色で他のアイテムを描くようにしています。リストボックスマニュアル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プロパティがOwnerDrawVariableに設定されています。

リストボックスのフォントがデフォルトフォントの場合、私のコードはうまくいきます。

しかし、フォントサイズを8.25(デフォルトサイズ)から14に変更すると、テキストの半分がリストボックスに描画されます。このように: My listbox when size is 14!

ただし、デフォルトのフォントサイズではすべて正しいです。

何が問題ですか?あなたはMeasureItemイベントを処理し、そこの項目の高さを設定する必要が

答えて

6

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

私は 'e.ItemHeight = listBox1.Font.Heightを使用している;'、それがうまく動作します。ありがとう! –

+2

優秀、あなたのコメントで私の答えを更新しますので、それは追加のカスタム 'ListBoxFontItem'クラスに依存しません。 –

関連する問題