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,
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.
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
///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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With