Since we no longer use this logic I hadn't noticed that Vista changes the handle several times through the life of the form. So to get around this, if you still intend to use window handle, then you will need to override the OnHandleChanged method to trap that event so that you can update your collection logic.
Overrides Protected Sub OnHandleChanged(...)
'-- Add your logic to update the collections
End Sub
However, I would recommend against using the window handle at this point and add a Guid property to your BaseForm that uniquely identifies the form:
Public Class MyBaseForm
Inherits MicroFour.StrataFrame.UI.Windows.Forms.StandardForm
Private _FormId As String = System.Guid.NewGuid().ToString()
Public Readonly Property FormId As String
Get
Return _FormId
End Get
End Property
End Class
Then you can enumerate the Forms collection of the MDI to find your form and then activate it (this code would be referencing the MDI form):
For each f as Form In Me.MdiChildren
If DirectCast(f, MyBaseForm).FormId = MyLookupId Then
'-- You found the form
End If
Next
If you take this approach you will be much safer across multiple platforms and won't be reliant upon the window handle.