Menu Details

Windows Forms supports menus and context menus. Main menus are displayed on a menu bar that is located immediately below the title bar of a form. The menu bar contains top-level menu items that are used to group related submenu items. For example, by clicking a File top-level menu item, you can display menu items that are related to file operations. Menu items typically appear as commands for your application (such as New and Open),but they can also appear as separator bars and submenu items. You can display a check mark next to a menu item to display the state of a command or a the state of a feature in your application. In Windows Forms, main menus are represented by the MainMenu control.

Context menus can be displayed for a specific control or area of your form. They are typically accessed by clicking the right mouse button. In Windows Forms, context menus are represented by the ContextMenu control.

ContextMenu and MainMenu derive from Menu. They share many properties, methods, and events.

Adding a MainMenu to a Form

The following code demonstrates how to add a MainMenu to a form. main_menu: WINFORMS_MAIN_MENU create main_menu.make set_menu (main_menu)

Adding a Context Menu to a Control

The following code demonstrates how to create a ContextMenu and assign it to a control. label_1: WINFORMS_LABEL label_1_context_menu: WINFORMS_CONTEXT_MENU create label_1.make create label_1_context_menu.make label_1.set_context_menu (label_1_context_menu)

Adding Menu Items

In the following example, a File menu item is added to the MainMenu. The File menu item contains submenu items called Open and Exit. mi_file: WINFORMS_MAIN_MENU mi_file := main_menu. get_menu_items.add (("&File").to_cil ) dummy := mi_file. get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text (("&Open...").to_cil )) dummy := mi_file. get_menu_items.add (("-").to_cil ) -- Gives us a separator dummy := mi_file. get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text(("E&xit").to_cil )


The following code demonstrates how to handle the Click event for both the Open and Exit menu items created in the previous code example. mi_file := main_menu.get_menu_items.add (("&File").to_cil) dummy := mi_file.get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text_and_on_click_and_shortcut (("&Open...").to_cil, create {EVENT_HANDLER}.make (Current, $FileOpen_Clicked), feature {WINFORMS_SHORTCUT}.ctrl_O)) dummy := mi_file.get_menu_items.add (("-").to_cil) -- Gives us a separator dummy := mi_file.get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text_and_on_click_and_shortcut (("E&xit").to_cil, create {EVENT_HANDLER}.make (Current, $FileExit_Clicked), feature {WINFORMS_SHORTCUT}.ctrl_X))


The following example demonstrates how to define shortcut keys for the menu items created in the previous example. mi_file := main_menu.get_menu_items.add (("&File").to_cil) dummy := mi_file.get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text_and_on_click_and_shortcut (("&Open...").to_cil, create {EVENT_HANDLER}.make (Current, $FileOpen_Clicked), feature {WINFORMS_SHORTCUT}.ctrl_O)) dummy := mi_file.get_menu_items.add (("-").to_cil) -- Gives us a separator dummy := mi_file.get_menu_items.add_menu_item (create {WINFORMS_MENU_ITEM}.make_from_text_and_on_click_and_shortcut (("E&xit").to_cil, create {EVENT_HANDLER}.make (Current, $FileExit_Clicked), feature {WINFORMS_SHORTCUT}.ctrl_X))

Adding Submenus

The following example demonstrates how to create submenus. mi_format: WINFORMS_MAIN_MENU -- Add Format Menu mi_format := main_menu.get_menu_items.add (("F&ormat").to_cil) -- Font Face sub-menu create mmi_sans_serif.make_from_text_and_on_click ((("").to_cil).concat_string_string (("&1. ").to_cil, sans_serif_font_family.get_name), create {EVENT_HANDLER}.make (Current, $FormatFont_Clicked)) mmi_sans_serif.set_checked (True) mmi_sans_serif.set_default_item (True) create mmi_serif.make_from_text_and_on_click ((("").to_cil).concat_string_string(("&2. ").to_cil, serif_font_family.get_name), create {EVENT_HANDLER}.make (Current, $FormatFont_Clicked)) create mmi_mono_space.make_from_text_and_on_click ((("").to_cil).concat_string_string(("&3. ").to_cil, mono_space_font_family.get_name), create {EVENT_HANDLER}.make (Current, $FormatFont_Clicked)) create l_array_menu_item.make (3) l_array_menu_item.put (0, mmi_sans_serif) l_array_menu_item.put (1, mmi_serif) l_array_menu_item.put (2, mmi_mono_space) dummy := mi_format.get_menu_items.add_string_menu_item_array (("Font &Face").to_cil, l_array_menu_item)

Adding Default Menu Items

The following example demonstrates how to specify a default menu item. mmi_sans_serif: WINFORMS_MAIN_MENU create mmi_sans_serif.make_from_text_and_on_click ((("").to_cil).concat_string_string (("&1 ").to_cil, sans_serif_font_family.get_name), create {EVENT_HANDLER}.make (Current, $format_font_clicked)) mmi_sans_serif.set_checked (True)

Adding Check Marks to Menu Items

The following example demonstrates how to display a check mark next to a menu item. The code also demonstrates how to track which item is checked. mi_medium: WINFORMS_MAIN_MENU create mi_medium.make_from_text_and_on_click (("&Medium").to_cil, create {EVENT_HANDLER}.make (Current, $format_size_clicked)) mi_medium.set_checked (True)


Cloning Menus

In many cases, the context menu for a control is a subset of the main menu. You cannot add the same menu items to multiple menus, but you can clone a menu item or set of menu items. The following code demonstrates how to clone the Format menu created previously and add it to the context menu of a Label. mmy := label_1_context_menu.get_menu_items.add_menu_item (mi_format.clone_menu)