// MenuDemoWithPopupMenuApplication.cs Copyright (c) Kari Laitinen // http://www.naturalprogramming.com // 2008-03-02 File created. // 2022-12-20 Tested in Developer Command Prompt for VS 2022. // This program is a modified version of MenuDemoApplication.cs. // This version provides a pop-up menu in addition to the traditional // menus. // The settings of the program can be modified both with a conventional // Settings menu and with a popup settings menu. These two menus are // simply different menus and they are synchronized in the // methods that react to these menus. // In a Windows PC, you have to use the RIGHT mouse button to // make the pop-up menu active. // In Windows terminology, pop-up menus are called context menus. using System ; using System.Windows.Forms ; using System.Drawing ; class MenuDemoWithPopupMenuForm : Form { const int WINDOW_WIDTH = 800 ; const int WINDOW_HEIGHT = 480 ; MenuItem cyan_background_menu_item ; MenuItem small_text_menu_item, medium_text_menu_item, large_text_menu_item ; MenuItem popup_cyan_background_menu_item ; MenuItem popup_small_text_menu_item, popup_medium_text_menu_item, popup_large_text_menu_item ; String last_selected_menu_item = "NO SELECTIONS MADE." ; public MenuDemoWithPopupMenuForm() { BackColor = Color.White ; ClientSize = new Size( WINDOW_WIDTH, WINDOW_HEIGHT ) ; Text = "C# APPLICATION WITH MENUS AND POPUP MENU" ; // Window title MainMenu main_menu_of_this_window = new MainMenu() ; MenuItem file_menu = main_menu_of_this_window.MenuItems.Add( "&File" ) ; file_menu.MenuItems.Add( "&Open", new EventHandler( file_open_selection_made ) ) ; file_menu.MenuItems.Add( "&Save", new EventHandler( file_save_selection_made ) ) ; file_menu.MenuItems.Add( "E&xit", new EventHandler( file_exit_selection_made ) ) ; MenuItem edit_menu = main_menu_of_this_window.MenuItems.Add( "Edit" ) ; edit_menu.MenuItems.Add( "Copy", new EventHandler( edit_copy_selection_made ) ) ; edit_menu.MenuItems.Add( "Paste", new EventHandler( edit_paste_selection_made ) ) ; MenuItem settings_menu = main_menu_of_this_window.MenuItems.Add( "Settings" ) ; cyan_background_menu_item = new MenuItem( "Cyan background", new EventHandler( cyan_background_selection_made ) ) ; settings_menu.MenuItems.Add( cyan_background_menu_item ) ; small_text_menu_item = new MenuItem( "Small", new EventHandler( text_size_selection_made ) ) ; medium_text_menu_item = new MenuItem( "Medium", new EventHandler( text_size_selection_made ) ) ; large_text_menu_item = new MenuItem( "large", new EventHandler( text_size_selection_made ) ) ; medium_text_menu_item.Checked = true ; // This is selected by default. small_text_menu_item.RadioCheck = true ; medium_text_menu_item.RadioCheck = true ; large_text_menu_item.RadioCheck = true ; // The following statement builds a submenu for the Settings menu. MenuItem text_size_menu = settings_menu.MenuItems.Add( "Text size" ) ; text_size_menu.MenuItems.Add( small_text_menu_item ) ; text_size_menu.MenuItems.Add( medium_text_menu_item ) ; text_size_menu.MenuItems.Add( large_text_menu_item ) ; MenuItem help_menu = main_menu_of_this_window.MenuItems.Add( "Help" ) ; help_menu.MenuItems.Add( "About", new EventHandler( help_about_selection_made ) ) ; // Finally, we'll attach the main menu to the form Menu = main_menu_of_this_window ; // Let's build the popup menu (context menu). ContextMenu popup_settings_menu = new ContextMenu() ; popup_cyan_background_menu_item = new MenuItem( "Cyan background", new EventHandler( cyan_background_selection_made ) ) ; popup_settings_menu.MenuItems.Add( popup_cyan_background_menu_item ) ; popup_small_text_menu_item = new MenuItem( "Small", new EventHandler( text_size_selection_made ) ) ; popup_medium_text_menu_item = new MenuItem( "Medium", new EventHandler( text_size_selection_made ) ) ; popup_large_text_menu_item = new MenuItem( "large", new EventHandler( text_size_selection_made ) ) ; popup_medium_text_menu_item.Checked = true ; // Default selection popup_small_text_menu_item.RadioCheck = true ; popup_medium_text_menu_item.RadioCheck = true ; popup_large_text_menu_item.RadioCheck = true ; // The following statement builds a submenu for the popup Settings menu. MenuItem popup_text_size_menu = popup_settings_menu.MenuItems.Add( "Text size" ) ; popup_text_size_menu.MenuItems.Add( popup_small_text_menu_item ) ; popup_text_size_menu.MenuItems.Add( popup_medium_text_menu_item ) ; popup_text_size_menu.MenuItems.Add( popup_large_text_menu_item ) ; ContextMenu = popup_settings_menu ; // Attach the popup menu to the form. } // The following methods react to the menu selections. // In most cases the only reaction is that the text that // appears on the screen is changed. private void file_open_selection_made( Object sender, EventArgs event_data ) { last_selected_menu_item = "Open" ; Invalidate() ; } private void file_save_selection_made( Object sender, EventArgs event_data ) { last_selected_menu_item = "Save" ; Invalidate() ; } private void file_exit_selection_made( Object sender, EventArgs event_data ) { Close() ; // This terminates the program. } private void edit_copy_selection_made( Object sender, EventArgs event_data ) { last_selected_menu_item = "Copy" ; Invalidate() ; } private void edit_paste_selection_made( Object sender, EventArgs event_data ) { last_selected_menu_item = "Paste" ; Invalidate() ; } private void cyan_background_selection_made( Object sender, EventArgs event_data ) { if ( cyan_background_menu_item.Checked == true ) { cyan_background_menu_item.Checked = false ; popup_cyan_background_menu_item.Checked = false ; BackColor = Color.White ; } else { cyan_background_menu_item.Checked = true ; popup_cyan_background_menu_item.Checked = true ; BackColor = Color.Cyan ; } last_selected_menu_item = "Cyan background" ; Invalidate() ; } // The following method reacts to all text size selections. // When compared to the same method in program MenuDemoApplication.cs, // this version of the method is modified so that it can handle // also the menu items in the popup menu. private void text_size_selection_made( Object sender, EventArgs event_data ) { if ( sender == small_text_menu_item || sender == popup_small_text_menu_item ) { small_text_menu_item.Checked = true ; medium_text_menu_item.Checked = false ; large_text_menu_item.Checked = false ; popup_small_text_menu_item.Checked = true ; popup_medium_text_menu_item.Checked = false ; popup_large_text_menu_item.Checked = false ; } else if ( sender == medium_text_menu_item || sender == popup_medium_text_menu_item ) { small_text_menu_item.Checked = false ; medium_text_menu_item.Checked = true ; large_text_menu_item.Checked = false ; popup_small_text_menu_item.Checked = false ; popup_medium_text_menu_item.Checked = true ; popup_large_text_menu_item.Checked = false ; } else if ( sender == large_text_menu_item || sender == popup_large_text_menu_item ) { small_text_menu_item.Checked = false ; medium_text_menu_item.Checked = false ; large_text_menu_item.Checked = true ; popup_small_text_menu_item.Checked = false ; popup_medium_text_menu_item.Checked = false ; popup_large_text_menu_item.Checked = true ; } last_selected_menu_item = "Text size item." ; Invalidate() ; } // Help -> About selection brings a message dialog to the screen. private void help_about_selection_made( Object sender, EventArgs event_data ) { MessageBox.Show( "This is a simple GUI application" + "\nwith menus.", "About" ) ; } protected override void OnPaint( PaintEventArgs paint_data ) { Graphics graphics = paint_data.Graphics ; Font font_for_text_line = null ; if ( small_text_menu_item.Checked == true ) { font_for_text_line = new Font( FontFamily.GenericSerif, 10 ) ; } else if ( medium_text_menu_item.Checked == true ) { font_for_text_line = new Font( FontFamily.GenericSerif, 12 ) ; } else // must be that large_text_menu_item.Checked == true { font_for_text_line = new Font( FontFamily.GenericSerif, 16 ) ; } graphics.DrawString( "Last selected menu item: \"" + last_selected_menu_item + "\"", font_for_text_line, new SolidBrush( Color.Black ), 100, 200 ) ; } } public class MenuDemoWithPopupMenuApplication { static void Main() { Application.Run( new MenuDemoWithPopupMenuForm() ) ; } } /* NOTE: */