c# - UITypeEditor is not closing properly -


i using usercontrol uitypeeditor. user control has ok , cancel buttons nothing except display messagebox either ok or cancel , hide user control. when click 1 of buttons, propertygrid displays empty box usercontrol until click away. box disappears , dialog displayed.

enter image description here

here user control code:

using system; using system.windows.forms;  namespace j2associates.tools.winforms.controls.designtimesupport.supportingclasses {     public partial class simpletest : usercontrol     {         public bool cancelled { get; set; }          public simpletest()         {             initializecomponent();         }          private void btnok_click(object sender, eventargs e)         {             cancelled = false;             this.hide();         }          private void btncancel_click(object sender, eventargs e)         {             cancelled = true;             this.hide();         }     } } 

here uitypeeditor code:

using system; using system.drawing.design; using system.windows.forms; using system.windows.forms.design;  using j2associates.tools.winforms.controls.designtimesupport.supportingclasses;  namespace j2associates.tools.winforms.controls.designtimesupport.editors {     internal class timeelementseditor : uitypeeditor // propertyeditorbase<timeelementsusercontrol>     {         public override uitypeeditoreditstyle geteditstyle(system.componentmodel.itypedescriptorcontext context)         {             return uitypeeditoreditstyle.dropdown;         }          public override object editvalue(system.componentmodel.itypedescriptorcontext context, iserviceprovider provider, object value)         {             if (value.gettype() == typeof(j2atimepicker.timeelementoptions))             {                 var editorservice = provider.getservice(typeof(iwindowsformseditorservice)) iwindowsformseditorservice;                 if (editorservice != null)                 {                     using (var st = new simpletest())                     {                         editorservice.dropdowncontrol(st);                         if (st.cancelled)                         {                             messagebox.show("cancel");                         }                         else                         {                             messagebox.show("ok");                         }                         editorservice.closedropdown();                     }                 }             }              return value;         }     } } 

any ideas and/or suggestions appreciated.

sigh, it's easy when find it.

i needed pass iwindowsformseditorservice in via overloaded constructor, cache , call it's closedropdown method in button click events instead of hiding user control. works expected.

/// <summary> /// displays ok , cancel button. when 1 pressed,  /// dialog closed , message box displayed. /// actual value of property unchanged throughout. /// </summary> /// <remarks>the toolboxitem attribute prevents control being displayed in toolkit.</remarks> [toolboxitem(false)] public partial class simpletest : usercontrol {     public bool cancelled { get; set; }      private iwindowsformseditorservice m_editorservice;      // require use of desired overloaded constructor.     private simpletest()     {         initializecomponent();     }      internal simpletest(iwindowsformseditorservice editorservice)         : this()     {         // cache editor service.         m_editorservice = editorservice;     }      private void btnok_click(object sender, eventargs e)     {         cancelled = false;         m_editorservice.closedropdown();     }      private void btncancel_click(object sender, eventargs e)     {         cancelled = true;         m_editorservice.closedropdown();     } } 

and here modified editor call:

using (var simpletest = new simpletest(editorservice)) {     editorservice.dropdowncontrol(simpletest);     messagebox.show(simpletest.cancelled ? "cancelled" : "ok"); } 

Comments