Microsoft KB Archive/138530

= PRB: Arrow Keys Do Not Always Produce a KeyDown Event =

Article ID: 138530

Article Last Modified on 3/14/2005

-

APPLIES TO


 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 Enterprise Edition
 * Microsoft Visual Basic 3.0 Professional Edition

-



This article was previously published under Q138530



SYMPTOMS
The KeyDown event for a form is not invoked when using the arrow (navigational) keys, even though the Keypreview property is set to True for the form. Instead the arrow keys cause other controls to gain the focus, even if the TabStop property is set to False for those controls.

NOTE: The DEL key may not trigger the KeyDown event either. For instance, in Visual Basic 4.0 the DEL key in a masked edit box does not trigger the KeyDown event.



RESOLUTION
You can get around this behavior by placing the problem controls onto a container that has a trappable KeyDown event. This would include the TabStrip, SSTab, PictureBox, and so forth. The following example uses a PictureBox because it is easily made unnoticeable.

Steps to Work Around Behavior
 Create a new project in Visual Basic. Form1 is created by default. Set the KeyPreview property to True for Form1.  Add a PictureBox to Form1 and set the following properties: TabStop    False BorderStyle 0 - None BackColor  Same as From (by default)  Add three CommandButtons to Picture1. Set the Tabstop property of each CommandButton to False.  Add the following code to the code window of Form1: Private Sub Command5_Click 'some code here Picture1.SetFocus End Sub

Private Sub Command6_Click 'some code here Picture1.SetFocus End Sub

Private Sub Command7_Click 'some code here Picture1.SetFocus End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print "Form_KeyDown - " & KeyCode End Sub

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print "Picture1_KeyDown - " & KeyCode End Sub  Run the program by pressing the F5 key. Note that the PictureBox is unnoticeable. Pressing an arrow key activates the KeyDown event of the PictureBox and of the form. You can now use either Event to trap the Arrow keys.</li></ol>

<div class="status_section">

STATUS
Microsoft is researching this behavior and will post new information here in the Microsoft Knowledge Base as it becomes available.

<div class="moreinformation_section">

MORE INFORMATION
Whether or not the form receives a KeyDown event depends on the type of control that has the focus when the arrow key is pressed. The KeyDown event of the form will be correctly activated if the arrow keys are used when a control such as a text box, a list box, or a picture box has the focus. The KeyDown event for the form is not activated when Command buttons, check boxes, and option buttons have the focus when an arrow key is pressed. In all cases, this behavior does not depend on whether Tabstop is set to True or False for the control.

Steps to Reproduce Behavior

 * 1) Create a new project in Visual Basic. Form1 is created by default.
 * 2) Set the KeyPreview property to True for Form1.
 * 3) Add two Command buttons to Form1.
 * 4) Set the Tabstop property of both Command buttons to False.
 * 5) Add a DoEvents statement to the Form_KeyDown procedure. Set a breakpoint on the line by highlighting DoEvents and pressing the F9 key.
 * 6) Run the program by pressing the F5 key. Pressing an arrow key does not activate the KeyDown event of the form.

Keywords: kbprb KB138530

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.