Cheap Focus Tracking

The Lost_Focus and Got_Focus events are the most-used events for implementing validation and texthighlighting. Wouldn’t it be nice to respond instantly to these events and to do it from a single routine for allcontrols 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 = _                Me.ActiveControl.Name        Do                strActive = Me.ActiveControl.Name                If strControlName <> strActive _                        Then                        Print strControlName & _                                " - Lost Focus", _                                strActive & " - Got Focus"                        strControlName = strActive                End If                DoEvents        LoopEnd Sub

To implement universal highlighting, replace the Print statement with this code:

 Me.Controls(strActive).SelStart = 0Me.Controls(strActive).SelLength = _        Len(Me.Controls(strActive))

To implement validation, replace the Print statement with a call to a validation routine. Use strActive in aSelect Case structure. At the moment where the Print statement would occur, strActive is equal to thecontrol 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 bothin the Got_Focus/Lost_Focus events, and in code called by this routine. Doing so might cause unpredictableresults.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: