Custom Controls Design Time Support Part 8: Implementing UITypeEditor

by Amr Elsehemy 18. January 2008 11:15

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:

  1. Define a class that derives from System.Drawing.Design.UITypeEditor.
  2. Override GetEditStyle to return a supported UITypeEditorEditStyle.
  3. Override EditValue and pass any controls necessary to the IWindowsFormsEditorService.
  4. Override GetPaintValueSupported.
  5. Override PaintValue if the editor supports painting.
  6. Override IsDropDownResizable if the editor is resiazble.a


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)

Tags: , , ,

Design Time Support

Comments

1/25/2008 9:37:33 AM #

Amr

Thank you very much gabriel that made my day,
I hope to continue in a useful high quality manner.

Amr Egypt |

1/25/2008 11:46:26 AM #

gabriel

Great series!  Thank you very much for this, very high quality work, and a rockin' way to start up your blog!

gabriel Mexico |

4/12/2008 8:26:39 PM #

GeezerButler

Very nice posts!
This is much more helpful than the msdn documentation.

GeezerButler India |

5/8/2008 9:14:48 AM #

Mahmoud

Thank you Amr. I spent the morning looking for such a complete article and pedagogical article. It was very helpful.

Mahmoud Tunisia |

7/14/2008 9:34:10 PM #

Asif

thanks man your articles helped alot

Asif |

Comments are closed

About the author

Amr Elsehemy
MCSD C#.Net,
MCTS Sql 2005,
MCPD Enterprise
avatar
E-mail me Send mail

Calendar

<<  March 2010  >>
MoTuWeThFrSaSu
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar