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);
            }