@@ -10,14 +10,14 @@ namespace AccessCodeLib.Common.VBIDETools
1010 public class VbeUserControl < TControl > : IDisposable
1111 {
1212 private readonly TControl _control ;
13- private readonly Window _vbeWindow ;
13+ private Window _vbeWindow ;
1414
1515 public VbeUserControl ( AddIn addIn , string caption , string positionGuid ,
1616 TControl controlToHost , bool visible = true ,
17- string VbideUserControlHostProgId = VbeUserControlHostSettings . ProgId )
17+ string vbideUserControlHostProgId = VbeUserControlHostSettings . ProgId )
1818 {
1919 object docObj = null ;
20- _vbeWindow = addIn . VBE . Windows . CreateToolWindow ( addIn , VbideUserControlHostProgId ,
20+ _vbeWindow = addIn . VBE . Windows . CreateToolWindow ( addIn , vbideUserControlHostProgId ,
2121 caption , positionGuid , ref docObj ) ;
2222 _vbeWindow . Visible = true ;
2323
@@ -88,16 +88,33 @@ protected virtual void Dispose(bool disposing)
8888 {
8989 DisposeManagedResources ( ) ;
9090 }
91+ DisposeUnmanagedResources ( ) ;
9192 _disposed = true ;
9293 }
9394
9495 private void DisposeManagedResources ( )
9596 {
96- try
97+ if ( _control is IDisposable disposableControl )
98+ {
99+ disposableControl . Dispose ( ) ;
100+ }
101+ }
102+
103+ private void DisposeUnmanagedResources ( )
104+ {
105+ if ( _vbeWindow != null )
97106 {
98- _vbeWindow . Close ( ) ;
107+ try
108+ {
109+ _vbeWindow . Close ( ) ;
110+ }
111+ catch { /* ignore */ }
112+ finally
113+ {
114+ Marshal . ReleaseComObject ( _vbeWindow ) ;
115+ _vbeWindow = null ;
116+ }
99117 }
100- catch { /* ignore */ }
101118 }
102119
103120 public void Dispose ( )
0 commit comments