Wenn man in einem .NET Property Grid ein DateTime-Objekt bearbeitet, so klappt ein Kalender auf, in welchem das Datum eingestellt werden kann. Anschließend kann umständlich die Uhrzeit eingestellt werden. Möchte man dieses Prozedere etwas vereinfachen, kann man für das DateTime-Objekt einen neuen UITypeEditor schreiben:
public class DateTimePickerEditor : UITypeEditor { IWindowsFormsEditorService windowsFormsEditorService; DateTimePicker dateTimePicker=new DateTimePicker(); public DateTimePickerEditor() { dateTimePicker.Format=DateTimePickerFormat.Custom; dateTimePicker.CustomFormat=String.Format("{0} {1}", Application.CurrentCulture.DateTimeFormat.ShortDatePattern, Application.CurrentCulture.DateTimeFormat.ShortTimePattern); } public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.DropDown; } public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if(provider!=null) { windowsFormsEditorService=provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; } if(this.windowsFormsEditorService!=null) { dateTimePicker.Value=(DateTime)value; windowsFormsEditorService.DropDownControl(dateTimePicker); value=dateTimePicker.Value; } return value; } }
Nachdem der Editor fertiggestellt ist muss beim entsprechenden DateTime-Objekt noch der passende der Editor per Attribut definiert werden:
[EditorAttribute(typeof(DateTimePickerEditor), typeof(UITypeEditor))] public DateTime DateAndTime; { get { return dateAndTime; } set { dateAndTime=value; } }
Damit verfügt man nun über einen Editor im Property Grid, welcher die Bearbeitung von Datum und Zeit komfortabel erlaubt.