Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Colour Individual Items in a winforms ComboBox?

Tags:

I have a dilemma whereby I have a form which contains a number of comboboxes that contain information/options/items that may be invalid/out-of-date in certain circumstances.

I can't simply remove the out-of-date information from the items, but I do want to give the user a visual-clue when options are invalid.

I was thinking of colouring in the Items (probably red) to indicate if & when they are invalid. I don't necessarily need to prevent a user from selecting an invalid option, just make them visually aware that they are doing so.

Can this be done? Can you - dyamically - change the colo(u)r of combobox items?

Thanks,

like image 594
Mike Avatar asked Jan 12 '11 10:01

Mike


People also ask

How do I edit items in ComboBox?

Complete the following steps to edit items in a combo box control: Right-click the control and select Edit Items from the shortcut menu to display the Edit Items page of the Properties dialog box.


2 Answers

You may try DrawItem event of ComboBox. Keep your dates on a list and compare them with ID's and brush your items.

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) {         // Draw the background      e.DrawBackground();              // Get the item text         string text = ((ComboBox)sender).Items[e.Index].ToString();      // Determine the forecolor based on whether or not the item is selected         Brush brush;     if (YourListOfDates[e.Index] < DateTime.Now)// compare  date with your list.       {         brush = Brushes.Red;     }     else     {         brush = Brushes.Green;     }      // Draw the text         e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y); } 

To fire this event (thanks to @Bolu)

You need to change ComboBox.DrawMode to OwnerDrawFixed/OwnerDrawVariable to fire the comboBox_DrawItem

like image 53
Pabuc Avatar answered Oct 14 '22 23:10

Pabuc


///The ComboBoxCustom Control:  using System; using System.Windows.Forms; using System.Drawing; namespace TyroDeveloper {     public class ComboBoxCustom:ComboBox     {         public ComboBoxCustom() {              this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;          }         protected override void OnDrawItem(DrawItemEventArgs e)         {             base.OnDrawItem(e);             e.DrawBackground();             ComboBoxItem item = (ComboBoxItem)this.Items[e.Index];             Brush brush = new SolidBrush(item.ForeColor);             if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)              { brush = Brushes.Yellow; }             e.Graphics.DrawString(item.Text, this.Font, brush, e.Bounds.X, e.Bounds.Y);         }     }     public class ComboBoxItem     {         public ComboBoxItem() { }          public ComboBoxItem(string pText, object pValue)         {             text = pText; val = pValue;         }          public ComboBoxItem(string pText, object pValue, Color pColor)         {             text = pText; val = pValue; foreColor = pColor;         }          string text = "";         public string Text {              get { return text; } set { text = value; }          }          object val;         public object Value {              get { return val; } set { val = value; }          }          Color foreColor = Color.Black;         public Color ForeColor {              get { return foreColor; } set { foreColor = value; }          }          public override string ToString()         {             return text;         }     } }  //To add the items:  comboBoxCustom1.Items.Add(new ComboBoxItem("México","0",Color.Green)); comboBoxCustom1.Items.Add(new ComboBoxItem("USA", "1", Color.Blue)); comboBoxCustom1.Items.Add(new ComboBoxItem("China", "2", Color.Red)); 

the source url page: http://www.tyrodeveloper.com/2012/04/color-in-combobox-item.html

like image 21
tyrodeveloper Avatar answered Oct 14 '22 23:10

tyrodeveloper