[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnetlib ./ChangeLog System.Windows.Forms/Contro...
From: |
Heiko Weiss |
Subject: |
[dotgnu-pnet-commits] pnetlib ./ChangeLog System.Windows.Forms/Contro... |
Date: |
Thu, 06 Apr 2006 10:06:16 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: pnetlib
Branch:
Changes by: Heiko Weiss <address@hidden> 06/04/06 10:06:16
Modified files:
. : ChangeLog
System.Windows.Forms: Control.cs ControlBindingsCollection.cs
ControlToolkitMgr.cs Form.cs MainMenu.cs
ScrollableControl.cs TextBox.cs
TextBoxBase.cs
Log message:
fixed some memory leaks by keeping references.
Now a weak reference of a control is given for the toolkit
and not the control itself.
This avoids keeping a reference of the control in
toolkit.
Still some memory leaks are in pnetlib.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/ChangeLog.diff?tr1=1.2378&tr2=1.2379&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/Control.cs.diff?tr1=1.118&tr2=1.119&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/ControlBindingsCollection.cs.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/ControlToolkitMgr.cs.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/Form.cs.diff?tr1=1.51&tr2=1.52&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/MainMenu.cs.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/ScrollableControl.cs.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/TextBox.cs.diff?tr1=1.51&tr2=1.52&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/System.Windows.Forms/TextBoxBase.cs.diff?tr1=1.17&tr2=1.18&r1=text&r2=text
Patches:
Index: pnetlib/ChangeLog
diff -u pnetlib/ChangeLog:1.2378 pnetlib/ChangeLog:1.2379
--- pnetlib/ChangeLog:1.2378 Mon Apr 3 07:55:15 2006
+++ pnetlib/ChangeLog Thu Apr 6 10:06:16 2006
@@ -1,3 +1,18 @@
+2006-04-06 Heiko Weiss <address@hidden>
+
+ * System.Windows.Forms/Control.cs,
+ System.Windows.Forms/ControlBindingsCollection.cs,
+ System.Windows.Forms/ControlToolkitMgr.cs,
+ System.Windows.Forms/Form.cs,
+ System.Windows.Forms/MainMenu.cs,
+ System.Windows.Forms/ScrollableControl.cs,
+ System.Windows.Forms/TextBox.cs,
+ System.Windows.Forms/TextBoxBase.cs: fixed some memory leaks by keeping
references.
+ Now a weak reference of a control is given for the toolkit
+ and not the control itself. This avoids keeping a reference of the
control in
+ toolkit.
+ Still some memory leaks are in pnetlib.
+
2006-04-03 Heiko Weiss <address@hidden>
* System.Windows.Forms/Control.cs: fixed some layouting issues. Do
layout in PerformLayout, if control visible, even if parent not visible.
Index: pnetlib/System.Windows.Forms/Control.cs
diff -u pnetlib/System.Windows.Forms/Control.cs:1.118
pnetlib/System.Windows.Forms/Control.cs:1.119
--- pnetlib/System.Windows.Forms/Control.cs:1.118 Mon Apr 3 07:55:16 2006
+++ pnetlib/System.Windows.Forms/Control.cs Thu Apr 6 10:06:16 2006
@@ -961,6 +961,9 @@
{
get
{
+ if( null == controlBindingsCollection )
{
+ controlBindingsCollection = new
ControlBindingsCollection(this);
+ }
return controlBindingsCollection;
}
}
@@ -2244,16 +2247,37 @@
// Dispose all childs
if( null != controlCollection )
{
- Control o;
- int iCount =
controlCollection.Count;
- for( int i = 0; i <
iCount; i++ ) {
- o =
controlCollection[i];
- o.parent = null;
- o.Dispose();
- o = null;
+ try {
+ Control o;
+ int iCount =
controlCollection.Count;
+ for( int i = 0;
i < iCount; i++ ) {
+ o =
controlCollection[i];
+
o.parent = null;
+
o.Dispose();
+ o =
null;
+ }
+ }
+ catch( Exception ) {
+ // ignore
exceptions
}
controlCollection =
null;
}
+
+ if( null != children ) {
+ for(int i = 0; i <
children.Length; i++ )
+ {
+ children[i] =
null;
+ }
+ }
+ numChildren = 0;
+ children = null;
+
+ if( null != hoverTimer ) {
+ hoverTimer.Enabled =
false;
+ hoverTimer.Tick -= new
EventHandler(this.ProcessHoverTimerEvent);
+ hoverTimer.Dispose();
+ hoverTimer = null;
+ }
}
finally
{
@@ -2265,7 +2289,7 @@
SetControlFlag(ControlFlags.Disposing,
false);
}
#if CONFIG_COMPONENT_MODEL
- // not needed in this implementation
base.Dispose(disposing);
+ base.Dispose(disposing);
#endif
}
@@ -4982,6 +5006,7 @@
#endif
protected virtual void OnMouseDown(MouseEventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Enabled = false;
hoverTimer.Stop();
@@ -5001,6 +5026,7 @@
#endif
protected virtual void OnMouseEnter(EventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Enabled = true;
hoverTimer.Start();
@@ -5016,6 +5042,7 @@
#endif
protected virtual void OnMouseHover(EventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Stop();
EventHandler handler;
@@ -5030,6 +5057,7 @@
#endif
protected virtual void OnMouseLeave(EventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Enabled = false;
hoverTimer.Stop();
@@ -5057,6 +5085,7 @@
#endif
protected virtual void OnMouseUp(MouseEventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Enabled = false;
hoverTimer.Stop();
@@ -5076,6 +5105,7 @@
#endif
protected virtual void OnMouseWheel(MouseEventArgs e)
{
+ if( null == hoverTimer ) return; // we are
disposed
hoverTimer.Enabled = false;
hoverTimer.Stop();
@@ -5533,12 +5563,14 @@
{
// Internal state.
private Control owner;
+ bool bDisposeRemove = false;
// Constructor.
public ControlCollection(Control owner)
{
this.owner = owner;
}
+
// Get the control at a specific index.
public virtual Control this[int index]
@@ -5616,6 +5648,7 @@
owner.ResumeLayout();
}
}
+
bool IList.Contains(Object value)
{
if(value is Control)
@@ -5770,6 +5803,8 @@
// Remove a specific control from the collection.
public virtual void Remove(Control value)
{
+ if( this.bDisposeRemove ) return;
+
if(value != null && value.Parent ==
owner)
{
// Update the parent.
Index: pnetlib/System.Windows.Forms/ControlBindingsCollection.cs
diff -u pnetlib/System.Windows.Forms/ControlBindingsCollection.cs:1.3
pnetlib/System.Windows.Forms/ControlBindingsCollection.cs:1.4
--- pnetlib/System.Windows.Forms/ControlBindingsCollection.cs:1.3 Tue Jun
29 14:43:40 2004
+++ pnetlib/System.Windows.Forms/ControlBindingsCollection.cs Thu Apr 6
10:06:16 2006
@@ -76,6 +76,10 @@
protected override void ClearCore()
{
+ int iCount = this.Count;
+ for( int i = 0; i < iCount; i++ ) {
+ base[i].AssociateControl(null);
+ }
base.ClearCore();
}
@@ -91,6 +95,7 @@
protected override void RemoveCore(Binding dataBinding)
{
+ dataBinding.AssociateControl(null);
base.RemoveCore(dataBinding);
}
Index: pnetlib/System.Windows.Forms/ControlToolkitMgr.cs
diff -u pnetlib/System.Windows.Forms/ControlToolkitMgr.cs:1.1
pnetlib/System.Windows.Forms/ControlToolkitMgr.cs:1.2
--- pnetlib/System.Windows.Forms/ControlToolkitMgr.cs:1.1 Mon Mar 27
14:03:55 2006
+++ pnetlib/System.Windows.Forms/ControlToolkitMgr.cs Thu Apr 6 10:06:16 2006
@@ -21,6 +21,7 @@
using System;
using System.Threading;
+using System.Drawing;
using System.Drawing.Toolkit;
/*
@@ -59,13 +60,13 @@
if(parent != null )
{
return parent.Toolkit.CreateChildWindow
- (parent, x, y, w, h, control);
+ (parent, x, y, w, h, new
ControlWeakRef(control) );
}
else
{
// Use the default toolkit to create.
return ToolkitManager.Toolkit.CreateChildWindow
- (null, x, y, w, h, control);
+ (null, x, y, w, h, new
ControlWeakRef(control) );
}
}
@@ -84,7 +85,7 @@
new object[] { control, w, h } );
}
- return ToolkitManager.Toolkit.CreateTopLevelWindow( w, h,
control );
+ return ToolkitManager.Toolkit.CreateTopLevelWindow( w, h, new
ControlWeakRef(control) );
}
#endregion
@@ -103,7 +104,7 @@
);
}
- return mdiClient.CreateChildWindow(x,y,w,h, control);
+ return mdiClient.CreateChildWindow(x,y,w,h, new
ControlWeakRef(control) );
}
#endregion
@@ -123,10 +124,10 @@
}
if( null != parent ) {
- return parent.Toolkit.CreateMdiClient( parent, x, y, w,
h, control );
+ return parent.Toolkit.CreateMdiClient( parent, x, y, w,
h, new ControlWeakRef(control) );
}
else {
- return ToolkitManager.Toolkit.CreateMdiClient(null, x,
y, w, h, control);
+ return ToolkitManager.Toolkit.CreateMdiClient(null, x,
y, w, h, new ControlWeakRef(control) );
}
}
@@ -146,7 +147,7 @@
);
}
- return ToolkitManager.Toolkit.CreatePopupWindow(
x,y,w,h,control);
+ return ToolkitManager.Toolkit.CreatePopupWindow( x,y,w,h, new
ControlWeakRef(control) );
}
#endregion
@@ -189,4 +190,174 @@
}
+// Helper class to keep WeakReferences to Control
+// this is needed, because we must not keep a real reference in ToolkitWindow,
+// else Control never would get disposed.
+internal class ControlWeakRef : IToolkitEventSink
+{
+ private WeakReference mControlWeakRef;
+
+ public ControlWeakRef( IToolkitEventSink control ) {
+ this.mControlWeakRef = new WeakReference( control, false );
+ }
+
+ public void ToolkitExpose(Graphics graphics) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitExpose(graphics);
+ }
+ }
+
+ public void ToolkitMouseEnter() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseEnter();
+ }
+ }
+
+ public void ToolkitMouseLeave() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseLeave();
+ }
+ }
+
+ public void ToolkitFocusEnter() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitFocusEnter();
+ }
+ }
+
+ public void ToolkitFocusLeave() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitFocusLeave();
+ }
+ }
+
+ public void ToolkitPrimaryFocusEnter() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitPrimaryFocusEnter();
+ }
+ }
+
+ public void ToolkitPrimaryFocusLeave() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitPrimaryFocusLeave();
+ }
+ }
+
+ public bool ToolkitKeyDown(ToolkitKeys key) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ return co.ToolkitKeyDown(key);
+ }
+ return false;
+ }
+
+ public bool ToolkitKeyUp(ToolkitKeys key) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ return co.ToolkitKeyUp(key);
+ }
+ return false;
+ }
+
+ public bool ToolkitKeyChar(char charCode) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ return co.ToolkitKeyChar(charCode);
+ }
+ return false;
+ }
+
+ public void ToolkitMouseDown(ToolkitMouseButtons buttons, ToolkitKeys
modifiers, int clicks, int x, int y, int delta) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseDown(buttons, modifiers, clicks, x, y,
delta);
+ }
+ }
+
+ public void ToolkitMouseUp(ToolkitMouseButtons buttons, ToolkitKeys
modifiers, int clicks, int x, int y, int delta) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseUp(buttons, modifiers, clicks, x, y,
delta);
+ }
+ }
+
+ public void ToolkitMouseHover(ToolkitMouseButtons buttons, ToolkitKeys
modifiers, int clicks, int x, int y, int delta) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseHover(buttons, modifiers, clicks, x, y,
delta);
+ }
+ }
+
+ public void ToolkitMouseMove(ToolkitMouseButtons buttons, ToolkitKeys
modifiers, int clicks, int x, int y, int delta) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseMove(buttons, modifiers, clicks, x, y,
delta);
+ }
+ }
+
+ public void ToolkitMouseWheel(ToolkitMouseButtons buttons, ToolkitKeys
modifiers, int clicks, int x, int y, int delta) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMouseWheel(buttons, modifiers, clicks, x, y,
delta);
+ }
+ }
+
+ public void ToolkitExternalMove(int x, int y) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitExternalMove(x,y);
+ }
+ }
+
+ public void ToolkitExternalResize(int width, int height) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitExternalResize(width,height);
+ }
+ }
+
+ public void ToolkitClose() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitClose();
+ }
+ }
+
+ public void ToolkitHelp() {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitHelp();
+ }
+ }
+
+ public void ToolkitStateChanged(int state) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitStateChanged(state);
+ }
+ }
+
+ public void ToolkitMdiActivate(IToolkitWindow child) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitMdiActivate(child);
+ }
+ }
+
+ public void ToolkitBeginInvoke(IntPtr i_gch) {
+ IToolkitEventSink co = this.mControlWeakRef.Target as
IToolkitEventSink;
+ if( null != co ) {
+ co.ToolkitBeginInvoke(i_gch);
+ }
+ }
+
+}
+
}
\ No newline at end of file
Index: pnetlib/System.Windows.Forms/Form.cs
diff -u pnetlib/System.Windows.Forms/Form.cs:1.51
pnetlib/System.Windows.Forms/Form.cs:1.52
--- pnetlib/System.Windows.Forms/Form.cs:1.51 Mon Mar 27 14:03:55 2006
+++ pnetlib/System.Windows.Forms/Form.cs Thu Apr 6 10:06:16 2006
@@ -1179,6 +1179,35 @@
// Dispose of this control.
protected override void Dispose(bool disposing)
{
+ acceptButton = null;
+ defaultButton = null;
+ cancelButton = null;
+ mdiClient = null;
+ if( null != owner ) {
+ this.RemoveOwnedForm(owner);
+ owner = null;
+ }
+ if( null != ownedForms ) {
+ int iCount = ownedForms.Length;
+ for( int i = iCount-1; i >= 0; i-- ) {
+ if( null != ownedForms[i] ) {
+ ownedForms[i].Dispose();
+ }
+ }
+ }
+
+ if( null != menu ) {
+ menu.ownerForm = null;
+ menu = null;
+ }
+
+ if( null != mergedMenu ) {
+ if( mergedMenu.ownerForm == this ||
mergedMenu.ownerForm == null ) {
+ mergedMenu.Dispose();
+ }
+ mergedMenu = null;
+ }
+
base.Dispose(disposing);
}
@@ -1696,7 +1725,6 @@
}; // class ControlCollection
-
protected override void OnMouseDown(MouseEventArgs e)
{
// If the mouse is in the non client area,
Index: pnetlib/System.Windows.Forms/MainMenu.cs
diff -u pnetlib/System.Windows.Forms/MainMenu.cs:1.9
pnetlib/System.Windows.Forms/MainMenu.cs:1.10
--- pnetlib/System.Windows.Forms/MainMenu.cs:1.9 Sun Aug 7 10:37:45 2005
+++ pnetlib/System.Windows.Forms/MainMenu.cs Thu Apr 6 10:06:16 2006
@@ -29,7 +29,7 @@
{
// Internal state.
private RightToLeft rightToLeft;
- private Form ownerForm;
+ internal Form ownerForm;
private ContextMenu menuPopup;
private int currentMouseItem = -1;
// Has the menu been clicked.
@@ -314,9 +314,9 @@
}
}
- protected internal override void ItemSelectTimerTick(object
sender, EventArgs e)
- {
- base.ItemSelectTimerTick (sender, e);
+ protected internal override void ItemSelectTimerTick(object
sender, EventArgs e)
+ {
+ base.ItemSelectTimerTick (sender, e);
if(currentMouseItem != -1)
{
ItemSelected(currentMouseItem);
Index: pnetlib/System.Windows.Forms/ScrollableControl.cs
diff -u pnetlib/System.Windows.Forms/ScrollableControl.cs:1.13
pnetlib/System.Windows.Forms/ScrollableControl.cs:1.14
--- pnetlib/System.Windows.Forms/ScrollableControl.cs:1.13 Thu Mar 16
07:22:48 2006
+++ pnetlib/System.Windows.Forms/ScrollableControl.cs Thu Apr 6 10:06:16 2006
@@ -52,6 +52,12 @@
base.SetStyle(ControlStyles.ContainerControl,
true);
// HandleCreated+=new
EventHandler(ScrollableControl_HandleCreated);
}
+
+ protected override void Dispose(bool disposing) {
+ DestroyScrollBars();
+ base.Dispose( disposing );
+ }
+
protected virtual void AdjustFormScrollbars(bool displayScrollbars)
{
@@ -77,10 +83,7 @@
}
else
{
- vScrollBar.Dispose();
- vScrollBar = null;
- hScrollBar.Dispose();
- hScrollBar = null;
+ DestroyScrollBars();
}
}
}
@@ -547,6 +550,21 @@
vScrollBar.toolkitWindow.Raise();
UpdateScrollBars();
}
+
+ private void DestroyScrollBars()
+ {
+ if( null != vScrollBar ) {
+ vScrollBar.Scroll-=new
ScrollEventHandler(HandleScroll);
+ vScrollBar.Dispose();
+ vScrollBar = null;
+ }
+ if( null != hScrollBar ) {
+ hScrollBar.Scroll-=new
ScrollEventHandler(HandleScroll);
+ hScrollBar.Dispose();
+ hScrollBar = null;
+ }
+ }
+
// Dock padding edge definitions.
public class DockPaddingEdges: ICloneable
Index: pnetlib/System.Windows.Forms/TextBox.cs
diff -u pnetlib/System.Windows.Forms/TextBox.cs:1.51
pnetlib/System.Windows.Forms/TextBox.cs:1.52
--- pnetlib/System.Windows.Forms/TextBox.cs:1.51 Mon Mar 20 06:11:14 2006
+++ pnetlib/System.Windows.Forms/TextBox.cs Thu Apr 6 10:06:16 2006
@@ -219,6 +219,7 @@
}
else if (vScrollBar != null)
{
+ vScrollBar.ValueChanged-=new
EventHandler(vScrollBar_ValueChanged);
Controls.Remove(vScrollBar);
vScrollBar = null;
}
@@ -238,6 +239,7 @@
}
else if (hScrollBar != null)
{
+ hScrollBar.ValueChanged-=new
EventHandler(hScrollBar_ValueChanged);
Controls.Remove(hScrollBar);
hScrollBar = null;
}
@@ -589,7 +591,10 @@
InvalidateDirty();
mouseDown = false;
// We dont need to update any selection
- selectedRegion = null;
+ if( null != selectedRegion ) {
+ selectedRegion.Dispose();
+ selectedRegion = null;
+ }
}
protected override void OnFontChanged(EventArgs e)
@@ -1094,14 +1099,12 @@
InvalidateDirty();
}
-
// Called to change the text. Sets the update to whats needed to but
doesnt change the selection point or caret
private void SetTextActual( string text)
{
- if (!IsHandleCreated)
- {
- (this as Control).text = text;
- return;
+ if( !IsHandleCreated ) {
+ // create handle here to be sure that LayoutInfo will
be set correct.
+ this.CreateHandle();
}
// Layout the new text. Compare with old layout, Creating a
region for areas that must be updated.
bool prevLayout = layout != null;
@@ -2090,16 +2093,35 @@
invalidateRegion.Dispose();
invalidateRegion = null;
}
+ if( selectedRegion != null ) {
+ selectedRegion.Dispose();
+ selectedRegion = null;
+ }
if (vScrollBar != null)
{
+ vScrollBar.ValueChanged-=new
EventHandler(vScrollBar_ValueChanged);
vScrollBar.Dispose();
vScrollBar = null;
}
if (hScrollBar != null)
{
+ hScrollBar.ValueChanged-=new
EventHandler(hScrollBar_ValueChanged);
hScrollBar.Dispose();
hScrollBar = null;
}
+
+ // remove event handler
+ MouseDown -= new MouseEventHandler(HandleMouseDown);
+ MouseMove -= new MouseEventHandler(HandleMouseMove);
+ DoubleClick -= new EventHandler(HandleDoubleClick);
+ Paint -= new PaintEventHandler(HandlePaint);
+ MultilineChanged -=new EventHandler(HandleMultilineChanged);
+ WordWrapChanged -=new EventHandler(HandleWordWrapChanged);
+
+#if CONFIG_COMPONENT_MODEL
+ this.DataBindings.CollectionChanged -=new
CollectionChangeEventHandler(HandleDataBindingCollectionChanged);
+#endif
+
base.Dispose (disposing);
}
Index: pnetlib/System.Windows.Forms/TextBoxBase.cs
diff -u pnetlib/System.Windows.Forms/TextBoxBase.cs:1.17
pnetlib/System.Windows.Forms/TextBoxBase.cs:1.18
--- pnetlib/System.Windows.Forms/TextBoxBase.cs:1.17 Mon Mar 6 11:19:16 2006
+++ pnetlib/System.Windows.Forms/TextBoxBase.cs Thu Apr 6 10:06:16 2006
@@ -60,6 +60,13 @@
KeyDown += new KeyEventHandler(HandleKeyDown);
}
+ protected override void Dispose(bool disposing)
+ {
+ // remove event handler
+ KeyDown -= new KeyEventHandler(HandleKeyDown);
+ base.Dispose(disposing);
+ }
+
// Get or set this object's properties.
public bool AcceptsTab
{