Adding Menu Support to a Windows Form

This sample code shows you how to use the MainMenu and MenuItem classes to add a menu and click handler for a Windows Form.


In one of my recent C# applications I had to use menus on a form and corresponding event handlers on the click of menu items.



The MainMenu class is used to create a main menu. MenuItem class can be used to add menu items. MenuItem class is used to add menu items to the main menu. Menu item constructor takes its event handler as an argument.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace OpenFileDlg
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(80, 56);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(136, 32);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(56, 120);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(208, 20);
this.textBox1.TabIndex = 1;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox1,this.button1});
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(
new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
OpenFileDialog fdlg =
new OpenFileDialog();
fdlg.Title = "C# Corner Open File Dialog" ;
fdlg.InitialDirectory = @"c:\" ;
fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" ;
fdlg.FilterIndex = 2 ;
fdlg.RestoreDirectory =
true ;
if(fdlg.ShowDialog() == DialogResult.OK)
{
textBox1.Text = fdlg.FileName ;
}
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Adding a new menu to the form
MainMenu mainMenu = new MainMenu();
this.Menu = mainMenu;
ContextMenu label1ContextMenu =
new ContextMenu();
Label label1 =
new Label();
label1.ContextMenu = label1ContextMenu;
//Add Database Options Menu
MenuItem miFile = mainMenu.MenuItems.Add("&Database Options");
miFile.MenuItems.Add(
new MenuItem("&Open Database", new EventHandler this.FileOpen_Clicked), Shortcut.CtrlO));
miFile.MenuItems.Add("-");
// Gives us a seperator
miFile.MenuItems.Add(new MenuItem("&Create New Database", new EventHandler this.FileCreateDB_Clicked),
Shortcut.CtrlC));
miFile.MenuItems.Add("-");
miFile.MenuItems.Add(
new MenuItem("E&xit", new EventHandler this.FileExit_Clicked), Shortcut.CtrlX));
}

Here is
the code for event handlers:

//File->Open Database Menu item handler
private
void FileOpen_Clicked(object sender, System.EventArgs e)
{
openFileDialog fdlg =
new OpenFileDialog();
fdlg.Title = "C# Corner Open File Dialog" ;
fdlg.InitialDirectory = @"c:\" ;
fdlg.Filter = "All files (*.*)|*.*|Access Database(*.mdb) files (*.mdb)|*.mdb" ;
fdlg.FilterIndex = 2 ;
fdlg.RestoreDirectory =
true ;
if(fdlg.ShowDialog() == DialogResult.OK)
{
textBox1.Text = fdlg.FileName ;
}
}

//File->Create Database Menu item handler

private
void FileCreateDB_Clicked(object sender, System.EventArgs e)
{
MessageBox.Show("Create Database menu event");
}
//File->Exit Menu item handler
private
void FileExit_Clicked(object sender, System.EventArgs e)
{
this.Close();
}
}
}

References: MSDN