14 Ağustos 2009 Cuma

ListBox üyelerini farklı renklere boyamak (C#)

ListBox içerisindeki her üye için farklı bir renk ayarlamanız mümkündür. Bunun için ListBox'ın DrawMode property'si ve DrawItem event'ine müdahale etmemiz gerekir.

Form üzerine standart bir ListBox sürükleyip bırakın. Sonrasında DrawMode property'sini OwnerDrawFixed olarak ayarlayın. Bu ayarlama ListBox'ın DrawItem event'inin tetiklenmesini sağlayacaktır.

Formunuzun constructor methodunun sonuna aşağıdaki satırları ekleyin.
listBox1.BackColor = Color.Black;
listBox1.DrawMode = DrawMode.OwnerDrawFixed;
listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);

İlk satır formun arka fon rengini siyah olarak ayarlayacaktır.
İkinci satırda, yukarıda da bahsettiğimiz DrawMode ayarlanıyor ki ilgili event tetiklensin.
Üçüncü satırda da event tetiklendiginde hangi methodun çağırılacağı tanımlanıyor.

Eğer aşağıdaki methodu da formunuz üzerine eklerseniz, ToString()'i 6 harften büyük değer döndüren ListBox üyeleri kırmızı renkte, 6 ve daha az harfe sahip olanlar ise yeşil renkte görünecektir.

void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Brush myBrush = Brushes.White;

int harfSayisi = ((ListBox)sender).Items[e.Index].ToString().Length;
if (harfSayisi > 6)
{
myBrush = Brushes.Red;
}
else
{
myBrush =Brushes.Green;
}

e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);

e.DrawFocusRectangle();
}

Hiç yorum yok: