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

<<  September 2010  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar