PRB: GotFocus Event Fails If MsgBox Invoked in LostFocus Event (85856)
The information in this article applies to:
- Microsoft Visual Basic Enterprise Edition for Windows 4.0
- Microsoft Visual Basic Enterprise Edition for Windows 5.0
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
- Microsoft Visual Basic Standard Edition for Windows 2.0
- Microsoft Visual Basic Standard Edition for Windows 3.0
- Microsoft Visual Basic Professional Edition for Windows 2.0
- Microsoft Visual Basic Professional Edition for Windows 3.0
- Microsoft Visual Basic Standard Edition for Windows 1.0
This article was previously published under Q85856 SYMPTOMS
Invoking a message box from a control's LostFocus event prevents
the GotFocus event of the next selected control from executing.
CAUSE
This behavior occurs because the GotFocus event is not executed. Removing the
message box from the control's LostFocus allows the GotFocus event
to execute as expected.
RESOLUTION
To work around the problem, set a flag in the control's LostFocus event
procedure. Then call a generic test routine from the next control's
GotFocus event, as demonstrated in the following example:
- Start a new project in Visual Basic. Form1 is created by default.
- Create the following controls and properties for Form1:
Control Name Property Setting
----------------------------------
Text Box Text1 TabIndex = 0
Text Box Text2 TabIndex = 1
Text Box Text3 TabIndex = 2
- Add the following code to the general Declarations section of Form1:
Dim LastControl As Control
Dim CurrControl As Control
Sub CheckLostFocus ()
If (LastControl.Tag = "True") Then
X%=MsgBox("Is the value OK ?", 36, LastControl + " has Lost Focus")
If X% = 6 Then 'if YES
LastControl.Tag = ""
CurrControl.SetFocus
Else
LastControl.SetFocus
End If
End If
End Sub
Sub Form_Load ()
Set LastControl = Text1 'set to the first editable control
End Sub
The instructions 4 through 5 apply to EACH of the 3 Text Boxes:
- Add the following code to the LostFocus event for EACH Text control:
Sub Text1_LostFocus ()
Set LastControl = Text1
End Sub
Sub Text2_LostFocus ()
Set LastControl = Text2
End Sub
Sub Text3_LostFocus ()
Set LastControl = Text3
End Sub
- Add the following code to the GotFocus event of EACH Text control:
Sub Text1_GotFocus ()
Set CurrControl = Text1
CheckLostFocus
End Sub
Sub Text2_GotFocus ()
Set CurrControl = Text2
CheckLostFocus
End Sub
Sub Text3_GotFocus ()
Set CurrControl = Text3
CheckLostFocus
End Sub
- Add the following code to the Change event of EACH Text control:
Sub Text1_Change ()
Text1.Tag = "True"
End Sub
Sub Text2_Change ()
Text2.Tag = "True"
End Sub
Sub Text3_Change ()
Text3.Tag = "True"
End Sub
- Press the F5 key to run the program.
Note that both message boxes should appear as expected when the focus is
changed by using the TAB key or by clicking the next text box.
STATUS
This behavior is by design. It is a limitation of Visual Basic's
MsgBox statement.
Modification Type: | Minor | Last Reviewed: | 2/11/2005 |
---|
Keywords: | kbCtrl kbprb KB85856 |
---|
|