Microsoft KB Archive/129804

= PRB: Accelerator Keys Don't Work with Disabled MDI Form =

Article ID: 129804

Article Last Modified on 1/8/2003

-

APPLIES TO


 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 16-bit Enterprise Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition

-



This article was previously published under Q129804



SYMPTOMS
When a MDI Form is programmatically disabled (Form1.Enabled = False), accelerator keys on the MDI Parent form will not respond to user input.



CAUSE
By disabling the window with the keyboard focus, you now have a disabled window with the focus. Because it has the focus, all keystrokes are directed to it, but because it is disabled, those keystrokes are not processed. This is true even for accelerators on the MDI parent form.



RESOLUTION
This behavior exists in both versions 3.0 and 4.0 of Microsoft Visual Basic for Windows. This is, in fact, standard Windows MDI behavior.

The solution is to always move the focus off the MDI child form when it becomes disabled programmatically. If the focus is on a disabled MDI child, the accelerator keys will not work under Windows, because Windows doesn't send up the WM_KEYDOWN message that Visual Basic would have to process for the accelerator's keystroke.



STATUS
This behavior is by design. This is standard Windows MDI form behavior.



Steps to Reproduce Behavior
 Start a new project in Visual Basic. Form1 is created by default. Add a new MDI form to your project (MDIForm1).  Add two menu items to MDIForm1 using the following as a guide:   Menu       Property     Value --  mnuTop     Caption      Top mnuTop    Name         mnuTop

mnuSub1   Caption      Sub1 mnuSub1   Name         mnuSub1  Indent mnuSub1 making it a sub-menu of mnuTop by pressing the right arrow button on the Menu Editor. Assign the ShortCut key CTRL+A to mnuSub1.</li>  Add the following code to the mnuSub1_Click event: Sub mnuSub1_Click Msgbox "Accelerator Key Responded." End Sub </li> On Form1, add a command button (Command1).</li>  Add the following code to Command1_Click event: Sub Command1_Click Me.Enabled = False End Sub </li> Start the program by choosing Start from the Run menu or by pressing the F5 key.</li> Click the Command1 button on Form1. Form1 becomes disabled, and it has the focus.</li> Press CTRL+A. The accelerator menu on MDIForm1 does not respond.</li></ol>

Additional query words: 4.00 vb4win vb4all

Keywords: kbprb KB129804

-

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

© Microsoft Corporation. All rights reserved.