Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Aug 6, 1997



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Cheap Focus Tracking

The Lost_Focus and Got_Focus events are the most-used events for implementing validation and text highlighting. Wouldn't it be nice to respond instantly to these events and to do it from a single routine for all controls without the aid of a subclassing control? Here's the answer. Place a timer control on your form, set its Interval property to 100 and set Enabled = True. Name the control tmrFocusTracking. Code its Timer event alike this:
Private Sub tmrFocusTracking_Timer()
        Dim strControlName As String
        Dim strActive As String
        strControlName = _

                strActive = Me.ActiveControl.Name
                If strControlName <> strActive _
                        Print strControlName & _
                                " - Lost Focus", _
                                strActive & " - Got Focus"
                        strControlName = strActive
                End If
End Sub
To implement universal highlighting, replace the Print statement with this code:
Me.Controls(strActive).SelStart = 0
Me.Controls(strActive).SelLength = _
To implement validation, replace the Print statement with a call to a validation routine. Use strActive in a Select Case structure. At the moment where the Print statement would occur, strActive is equal to the control that just Got Focus, and strControlName holds the name of the control that just Lost Focus. Don't place this routine in anything but a timer; otherwise, your program hangs once the routine is called. Even the timer here never makes it to a second interval. For a given control, don't write validation code both in the Got_Focus/Lost_Focus events, and in code called by this routine. Doing so might cause unpredictable results.
John S.
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date