Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Way to color parts of the Listbox/ListView line in C# WinForms?

  1. Is there a way to color parts of ListBox Items (not only whole line)? For example listbox item consists of 5 words and only one is colored or 3 of 5.
  2. Is there a way to do the same with ListView? (I know that ListView can be colored per column but i would like to have multiple colors in one column).

I am interested in only free solutions, and preferred that they are not heavy to implement or change current usage (the least effort to introduce colored ListBox in place of normal one the better).

With regards,

MadBoy

like image 671
MadBoy Avatar asked Feb 15 '10 18:02

MadBoy


1 Answers

This article tells how to use DrawItem of a ListBox with DrawMode set to one of the OwnerDraw values. Basically, you do something like this:

listBox1.DrawMode = OwnerDrawFixed;
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
// TODO: Split listBox1.Items[e.Index].ToString() and then draw each separately in a different color
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),new Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold),new SolidBrush(color[e.Index]),e.Bounds);
}

Instead of the single DrawString call, Split listBox1.Items[e.Index].ToString() into words and make a separate call to DrawString for each word. You'll have to replace e.bounds with an x,y location or a bounding rectangle for each word.

The same approach should work for ListView.

like image 103
JeffH Avatar answered Oct 07 '22 01:10

JeffH