Windows applications provide groups of related commands in Menus. These commands
depends on the application, but some-such as Open and Save are frequently found
in applications. Menus are intrinsic controls, and as such they deserve a place
in this chapter. On the other hand, menus behave differently from other controls.
For example, you don't drop menu items on a form from the Toolbox; rather, you
design them in the Menu Editor window, as you can see in the figur below. You
invoke this tool from the Menu Editor button on the standard toolbar or by pressing
the Ctrl+E shortcut key. There's also a Menu Editor command in the Tools menu,
but you probably won't use it often.
Basic provides an easy way to create menus with the modal Menu Editor dialog.
The below dialog is displayed when the Menu Editor is selected in the Tool Menu.
The Menu Editor command is grayed unless the form is visible. And also you can
display the Menu Editor window by right clicking on the Form and selecting Menu
Basically, each menu item has a Caption property (possibly
with an embedded & character to create an access key) and a Name.
Each item also exposes three Boolean properties, Enabled, Visible, and Checked,
which you can set both at design time and at run time. At design time, you can
assign the menu item a shortcut key so that your end users don't have to go through
the menu system each time they want to execute a frequent command. (Do you really
like pulling down the Edit menu any time you need to clear some text or copy it
to the Clipboard?) The assigned shortcut key can't be queried at run time, much
Building a menu is a simple, albeit more tedious, job: You enter the item's
Caption and Name, set other properties (or accept the default values for those
properties), and press Enter to move to the next item. When you want to create
a submenu, you press the Right Arrow button (or the Alt+R hot key). When you want
to return to work on top-level menus—those items that appear in the menu
bar when the application runs—you click the Left Arrow button (or press
Alt+L). You can move items up and down in the hierarchy by clicking the corresponding
buttons or the hot keys Alt+U and Alt+B, respectively.
You can create up to five levels of submenus (six including the menu bar),
which are too many even for the most patient user. If you find yourself working
with more than three menu levels, think about trashing your specifications and
redesigning your application from the ground up.
You can insert a separator bar using the hypen (-) character for the Caption
property. But even these separator items must be assigned a unique value for the
Name property, which is a real nuisance. If you forget to enter a menu item's
Name, the Menu Editor complains when you decide to close it. The convention used
in this book is that all menu names begin with the three letters mnu.
An expanded Menu Editor window.
An expanded menu
One of the most annoying defects of the Menu Editor tool is that it doesn't
permit you to reuse the menus you have already written in other applications.
It would be great if you could open another instance of the Visual Basic IDE,
copy one or more menu items to the clipboard, and then paste those menu items
in the application under development. You can do that with controls and with pieces
of code, but not with menus! The best thing you can do in Visual Basic is load
the FRM file using an editor such as Notepad, find the portion in the file that
corresponds to the menu you're interested in, load the FRM file you're developing
(still in Notepad), and paste the code there. This isn't the easiest operation,
and it's also moderately dangerous: If you paste the menu definition in the wrong
place, you could make your FRM form completely unreadable. Therefore, always remember
to make backup copies of your forms before trying this operation.
Better news is that you can add a finished menu to a form in your application
with just a few mouse clicks. All you have to do is activate the Add-In Manager
from the Add-Ins menu, choose the VB 6 Template Manager, and tick the Loaded/Unloaded
check box. After you do that, you'll find three new commands in the Tools menu:
Add Code Snippet, Add Menu, and Add Control Set. Visual Basic 6 comes with a few
menu templates, as you can see in the following figure, that you might find useful
as a starting point for building your own templates. To create your menu templates,
you only have to create a form with the complete menu and all the related code
and then store this form in the \Templates\Menus directory. (The complete path,
typically c:\Program Files\Microsoft Visual Studio\VB98\Template, can be found
in the Environment tab of the Options dialog box on the Tools menu. The Template
Manager was already available with Visual Basic 5, but it had to be installed
manually and relatively few programmers were aware of its existence.
The Template Manager in action
The programmer can create menu control arrays. The Index TextBox specifies
the menu's index in the control array.
The Menu Editor dialog also provides several CheckBoxes to control the appearance
of the Menu.
Checked : This is unchecked by default and allows the
programmer the option of creating a checked menu item( a menu item that act as
a toggle and displays a check mark when selected. The following is a Check Menu
Enabled : specifies whether a menu is disabled or not. If you see a
disabled command in a menu that means that feature is not available. The Visible
checkbox specifies whether the menu is visible or not.
To add commands to the Form's menu bar, enter a caption and a name for each
command. As soon as you start typing the command's caption, it also appears in
a new line in the list at the bottom of the Menu Editor window. To add more commands
click Enter and type the Caption and the Name.
Open a new Project and save the form as menu.frm and save the project as menu.vbp.
Choose Tools Menu Editor and type the menu items
as shown below.
Run the application by pressing F5. You can see that you can select
a menu. (Download the source code)
More in Menus in Visual Basic 6