The situation : My program has a main MDI Form, in which different other forms can be opened, when the application is closed, it remembers which form was closed last, and it will open this form the next time you start the application .

One of these forms has 2 toolstrips, the second toolstrip : the "search" toolstript isnt reparented to the MDI Parent, and has 2 combo's, a textbox and a button in it .
Both combo's and the textbox trigger a click on the button when the user presses "ENTER" in those controls

this can be fixed in by manually unhooking the keydown event on the
toolstriptextboxitem
by adding following to your dispose
if (this.txtSearch != null)
this.txtSearch.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);

It does not appear to be necessary to do the same for both combos :
if (this.cbVT != null)
this.cbVT.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);
if (this.cbComboSearch != null)
this.cbComboSearch.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);

The only thing i still dont understand, is why this "leak" only happens when the window was opened by the program, and not when a user opens it afterwards !

By removing the event handler you avoid that the text box keeps a reference to the form and prevents it from being GCed. But I assume that the search text box should also be GCed, which it will not be since it's still referenced by the UserPreferenceChangedEventHandler.