public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) { var svc = provider.RequireService <IWindowsFormsEditorService>(); var pd = DictionaryPropertyDescriptor.GetFromContext(context); var dlgType = Type.GetType(pd.Option.TypeName); if (dlgType == null) { return(value); } var form = Activator.CreateInstance(dlgType) as Form; if (form == null) { return(value); } var valueProperty = dlgType.GetProperty("Value"); if (valueProperty == null) { return(value); } valueProperty.SetValue(form, value); if (svc.ShowDialog(form) == System.Windows.Forms.DialogResult.OK) { value = valueProperty.GetValue(form); } form.Dispose(); return(value); }