Introduction
There are a lot of color picker controls for Windows form app. This tip describes how to use an in-line color picker control that allows you to more easily select a color in MenuStrip or ContextMenuStrip. This control is called ToolStripInlineColorPicker control. The ToolStripInlineColorPicker class provides a color picker of color tile style like below:

Reference of ToolStripInlineColorPicker Class
The ToolStripInlineColorPicker class has inherited the ToolStripControlHost class that hosts the color tile panel control (ColorTilePanel class).
Constructors
| Name |
Description |
ToolStripInlineColorPicker() |
Initializes a new instance of the ToolStripInlineColorPicker class. |
Properties
| Name |
Description |
CellHeight |
Gets or sets the height in pixels of a color cell |
CellPadding |
Gets or sets the internal spacing, in pixels, between the color cells and its edges |
CellWidth |
Gets or sets the width in pixels of a color cell |
ColorList |
Gets or sets the list of colors that is displayed on the color tile panel |
ColorPanel |
Gets the color tile panel (ColorTilePanel class) in ToolStripInlineColorPicker class |
Columns |
Gets or sets the number of columns in the color tile panel |
CurrentColor |
Gets or sets the current color |
Name |
Gets or sets the name of the item (Inherited from ToolStripControlHost) |
Padding |
Gets or sets the internal spacing, in pixels, between the item's contents and its edges. (Inherited from ToolStripControlHost.) |
Rows |
Gets or sets the number of rows in the color tile panel. |
Events
| Name |
Description |
ColorSelected |
Occurs when the mouse pointer is over the color cell and a mouse left button is pressed. (Change CurrentColor property) |
How to Use the Class
Case 1. Use in MenuStrip
Use the Designer. Adding the MenuStrip control to your form. then, add InlineColorPicker to the menu item.

Using the properties window, set the properties and event handlers. Event handler that must be implemented is ColorSelected event handler only.
void colorPicker_ColorSelected(object sender, ColorSelectedEventArgs e)
{
currentColor = e.SelectedColor;
contextMenuStrip1.Close();
var item = menuStrip1.Items.Find("toolStripInlineColorPicker1", false);
(item[0] as ToolStripInlineColorPicker).CurrentColor = currentColor;
Text = currentColor.ToString();
Invalidate();
}
Case 2. Use in ContextMenuStrip
First, create the ContextMenuStrip control. Adding the ToolStripInlineColorPicker class. Then, set the properties and event handlers in code.
private void CreateContextMenuStrip()
{
contextMenuStrip1.Items.Add(new ToolStripMenuItem() { Text = "item1" });
contextMenuStrip1.Items.Add(new ToolStripSeparator());
var colorPicker = new ToolStripInlineColorPicker()
{
Name = "colorPicker",
BackColor = Color.White,
ColorList = colorList,
CurrentColor = currentColor,
Columns = 10,
Rows = 5
};
colorPicker.ColorSelected += colorPicker_ColorSelected;
contextMenuStrip1.Items.Add(colorPicker);
contextMenuStrip1.Items.Add(new ToolStripSeparator());
contextMenuStrip1.Items.Add(new ToolStripMenuItem() { Text = "item2" });
}
Next, implement event handlers.
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
var item = contextMenuStrip1.Items.Find("colorPicker", false);
(item[0] as ToolStripInlineColorPicker).CurrentColor = currentColor;
}
void colorPicker_ColorSelected(object sender, ColorSelectedEventArgs e)
{
currentColor = e.SelectedColor;
contextMenuStrip1.Close();
var item = menuStrip1.Items.Find("toolStripInlineColorPicker1", false);
(item[0] as ToolStripInlineColorPicker).CurrentColor = currentColor;
Text = currentColor.ToString();
Invalidate();
}
That's all. It's very easy to use.
Known Issues of the Class
In the case of the ContextMenuStrip control, you can't access properties and events of the ToolStripInlineColorPicker class in designer.
The demo project uses VS 2015.