.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
Sign In
Win Surprise Gifts!!!

Top 5 Contributors of the Month

Home >> Articles >> Windows Application >> Post New Resource Bookmark and Share   

 Subscribe to Articles

ColorComboBox - ComboBox to pick colors

Posted By:Jean Paul       Posted Date: January 12, 2011    Points: 75    Category: Windows Application    URL: http://www.dotnetspark.com  

ColorComboBox - ComboBox to pick colors from Color struct

In this short article, I am trying to create a ColorComboBox control which allows the user to select colors from System.Drawing.Color struct. 


The end control is shown in the snap shot below:


Steps involved in creating Control

The article is been subdivided into creating the custom combobox class and implementing the draw events.

Part 1: Create Custom ColorComboBox

For this, we have to create a new class and change the base class to ComboBox.

public class ColorComboBox : ComboBox

Part 2: Modify the constructor

We need to modify the constructor to fill the ComboBox with colors and change the draw mode.

public ColorComboBox()




    // Change DrawMode for custom drawing

    this.DrawMode = DrawMode.OwnerDrawFixed;

    this.DropDownStyle = ComboBoxStyle.DropDownList;



Part 3: Implement the FillColors() method

For loading the combobox with color items, we need to use .Net Reflection.  Following is the code to get all Color properties from struct Color.

private void FillColors()




    // Fill Colors using Reflection

    foreach (Color color in typeof(Color).GetProperties(BindingFlags.Static | BindingFlags.Public).Where(c => c.PropertyType == typeof(Color)).Select(c => (Color)c.GetValue(c, null)))






For reduction of code I have used Lambda Expressions.  Basically the code will iterate through all the properties which are static and public, then the Where() method will filter them by type of Color.  The Select() method converts the PropetyInfo to Color object using c.GetValue() method.

Part 4: Custom Draw the control

Now we are good with the entire color items in the list.  The next challenge is to display the item with the actual color filled in a rectangle and showing the color name next to it.

For this we have to override the OnDrawItem method of combobox.

protected override void OnDrawItem(DrawItemEventArgs e)

{    if (e.Index >= 0)

    {        Color color = (Color)this.Items[e.Index]; 

        int nextX = 0; 

        e.Graphics.FillRectangle(new SolidBrush(e.BackColor), e.Bounds);

        DrawColor(e, color, ref nextX);

        DrawText(e, color, nextX);





Whenever the ComboBox item is painted the above OnDrawItem() method will be called.  We basically checks whether the e.Index >= 0  to ensure there is a valid item in the list and do the custom drawing.

The drawing is divided into 3 steps.

1.       Paint the Background

2.       Draw the Color

3.       Draw the Text (color name)

Part 5: Add Property to get selected color

Now we need to add a new property to get/set  the selected color.

public Color Color




        if (this.SelectedItem != null)

            return (Color)this.SelectedItem; 

        return Color.Black;




        int ix = this.Items.IndexOf(value);

        if (ix >= 0)

            this.SelectedIndex = ix;



The above get code will return the selected color by converting selected item into Color struct.

The set code will allow us to set the selected color by taking the set value and iterating through the items in the combobox.

Using the Code

The attachment contains the ColorComboBox as well as the test form.  For reusing the control, one may take the ColorComboBox file alone and can be integrated to other projects.

 Subscribe to Articles


Further Readings:


No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend