PRB: Accelerator Keys Don't Work with Disabled MDI Form
ID: Q129804
|
The information in this article applies to:
-
Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 16-bit and 32-bit, for Windows, version 4.0
-
Microsoft Visual Basic Standard and Professional Editions for Windows, version 3.0
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.
MORE INFORMATION
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.
- Add the following code to the mnuSub1_Click event:
Sub mnuSub1_Click()
Msgbox "Accelerator Key Responded."
End Sub
- On Form1, add a command button (Command1).
- Add the following code to Command1_Click() event:
Sub Command1_Click()
Me.Enabled = False
End Sub
- Start the program by choosing Start from the Run menu or by pressing the
F5 key.
- Click the Command1 button on Form1. Form1 becomes disabled, and it has
the focus.
- Press CTRL+A. The accelerator menu on MDIForm1 does not respond.
Additional query words:
4.00 vb4win vb4all
Keywords :
Version : WINDOWS:3.0,4.0
Platform : WINDOWS
Issue type :