Here is a minor behavioral difference between VB6 and .NET. Say that you have a Frame control with a button on it that, when clicked, hides the Frame itself. Under VB6 this operation correctly moves the focus to the control “after” the Frame, according to the TabIndex order.
Under .NET, however, this operation moves the input focus to the next control inside the frame just before the entire frame becomes hidden. This additional input shift causes spurious GotFocus, LostFocus, and Validate events for such a control. Depending on the code in these event handlers, the migrated application might behave incorrectly or generate errors.
Worse, when the GotFocus event fires, the Frame’s Visible property uncorrectly returns the value True, even if the GotFocus event fired because the frame has become hidden.
Fortunately, this situation is quite rare and is unlikely to occur in most migrated applications, if your code misbehave for this reason, the recommended solution is that you set a Boolean variable inside the button’s Click event, and test this variable in the event handlers, as in this short example:
Dim frameIsHidden As Boolean
Private Sub cmdHide_Click()
frameIsHidden = True
Frame1.Visible = False
End Sub
Private Sub txtField_GotFocus()
If frameIsHidden Then Exit Sub
…
End Sub