In the previous post I gave a brief introduction on what is a UITypeEditor and what you can get from using it, this part I will show you how to implement one.
So here are the steps:
- Define a class that derives from System.Drawing.Design.UITypeEditor.
- Override GetEditStyle to return a supported UITypeEditorEditStyle.
- Override EditValue and pass any controls necessary to the IWindowsFormsEditorService.
- Override GetPaintValueSupported.
- Override PaintValue if the editor supports painting.
- Override IsDropDownResizable if the editor is resiazble.

Now we will go through the steps one by one, the example I will introduce here will be another ColorEditor, I will use the ColorWheel introduced and explained in this MSDN magazine article.
The final editor that we will make will look like this
Step 1
public class ColorWheelEditor : UITypeEditor
Step 2
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
Step 3
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
{
IWindowsFormsEditorService iwefs = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
Color c;
using (ColorWheelContainer cwc = new ColorWheelContainer(iwefs))
{
cwc.Color = (Color)value;
iwefs.DropDownControl(cwc);
if (cwc.Result == DialogResult.OK)
{
c = cwc.Color;
}
else
{
c = (Color)value;
}
}
return c;
}
Here, I need to introduce you to the IWindowsFormsEditorService .
| Namespace |
System.Windows.Forms.Design |
| Assembly |
System.Windows.Forms |
| Methods |
3 |
| |
| DropDownControl |
accepts a parameter of type control that will be shown the drop down, works when the edit style is UITypeEditorEditStyle.DropDown. |
| CloseDropDown |
when called closes the drop down, works when the edit style is UITypeEditorEditStyle.DropDown. |
| ShowDialog |
accepts a parameter of type Form, which represents the dialog that will be opened, works when the edit style is UITypeEditorEditStyle.Modal. |
|
Step 4
public override bool GetPaintValueSupported(System.ComponentModel.ITypeDescriptorContext context)
{
return true; // we will use the picked color and fill the rectangle.
}
Step 5
public override void PaintValue(PaintValueEventArgs e)
{
Color c = (Color)e.Value;
e.Graphics.FillRectangle(new SolidBrush(c), e.Bounds);
}
Step 6
public override bool IsDropDownResizable
{
get
{
return false;//we don't want it to be resizable
}
}
Now don't forget to associate the editor with the color property using the Editor attribute.
[Editor(typeof(ColorWheelEditor),typeof(UITypeEditor))]
public Color ColorProperty
In this part I showed how to implement a UITypeEditor that appears in a Drop Down. See you soon.
ColorWheelEditor.zip (13.99 kb)