在前幾節的基礎上,我們將透過一個完整的 Visual Studio .NET 專案,示範 Windows Forms 選單操作的各個面向。這個範例程式涵蓋了如何以 C# 程式碼動態新增主選單、建立右鍵彈出式選單、為選單項目繫結事件處理方法,以及管理選單項目屬性的存取等核心技術。
以下列出部分核心程式碼與註解說明:
private void InitializeComponent()
{
// 此處僅列出部分自動產生的初始化程式碼
this.button4.Text = "刪除彈出選單";
this.button4.Click += new System.EventHandler(this.button4_Click);
this.button1.Text = "新增主選單";
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Text = "新增彈出選單";
this.button2.Click += new System.EventHandler(this.button2_Click);
this.button3.Click += new System.EventHandler(this.button3_Click);
}
private void button1_Click(object sender, System.EventArgs e)
{
// 建立選單項目
MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem();
MenuItem menuItem3 = new MenuItem();
MenuItem menuItem4 = new MenuItem();
MainMenu mainMenu1 = new MainMenu();
// 設定選單項目顯示文字
menuItem1.Text = "編輯(&E)";
menuItem2.Text = "字型大小(&F)";
menuItem3.Text = "小(&S)";
// 設定預設勾選項目
menuItem3.Checked = true;
// 定義快捷鍵 Ctrl+S
menuItem3.Shortcut = Shortcut.CtrlS;
menuItem4.Text = "大(&L)";
// 定義快捷鍵 Ctrl+L
menuItem4.Shortcut = Shortcut.CtrlL;
// 設定索引位置
menuItem4.Index = 1;
// 將子選單加入父選單
menuItem2.MenuItems.Add(menuItem3);
menuItem2.MenuItems.Add(menuItem4);
menuItem1.MenuItems.Add(menuItem2);
// 為表單新增主選單
mainMenu1.MenuItems.Add(new MenuItem("檔案(&F)"));
mainMenu1.MenuItems.Add(menuItem1);
mainMenu1.MenuItems.Add(new MenuItem("檢視(&V)"));
mainMenu1.MenuItems.Add(new MenuItem("工具(&T)"));
mainMenu1.MenuItems.Add(new MenuItem("視窗(&W)"));
this.Menu = mainMenu1;
// 為部分選單項目繫結 Click 事件
this.Menu.MenuItems[0].Click += new System.EventHandler(this.Test);
menuItem3.Click += new System.EventHandler(this.Test);
this.Menu.MenuItems[2].Click += new System.EventHandler(this.Test);
}
private void button2_Click(object sender, System.EventArgs e)
{
// 為目前表單新增彈出式選單
this.ContextMenu = new ContextMenu(new MenuItem[] {
new MenuItem("彈出選單1"),
new MenuItem("彈出選單2"),
new MenuItem("彈出選單3"),
new MenuItem("彈出選單4")
});
// 設定第一個彈出選單項目的 Click 事件
this.ContextMenu.MenuItems[0].Click += new System.EventHandler(this.Test);
}
private void button3_Click(object sender, System.EventArgs e)
{
try
{
MenuItem temp = new MenuItem();
// 取得主選單最後一項的參考
temp = this.Menu.MenuItems[this.Menu.MenuItems.Count - 1];
// 顯示刪除確認訊息
MessageBox.Show("即將刪除選單: " + temp.Text, "提示訊息!");
// 移除主選單項目
this.Menu.MenuItems.Remove(temp);
}
catch
{
MessageBox.Show("操作無效,可能已無選單可供刪除!", "提示訊息");
}
}
private void button4_Click(object sender, System.EventArgs e)
{
try
{
MenuItem temp = new MenuItem();
// 取得彈出選單最後一項的參考
temp = this.ContextMenu.MenuItems[this.ContextMenu.MenuItems.Count - 1];
MessageBox.Show("即將刪除選單: " + temp.Text, "提示訊息!");
// 移除彈出選單最後一項
this.ContextMenu.MenuItems.Remove(temp);
}
catch
{
MessageBox.Show("操作無效,可能已無選單可供刪除!", "提示訊息");
}
}
private void Test(object sender, System.EventArgs e)
{
// 彈出訊息框顯示觸發事件的選單項目文字
// 注意此處對 sender 物件的強制型別轉換
MessageBox.Show("您透過選單: " + ((MenuItem)sender).Text + " 執行本程序!", "提示訊息");
}
執行該程式將顯示一個最初不包含任何選單的視窗。您可以透過按鈕動態為視窗新增主選單與彈出式選單,也能逐項刪除選單項目。點擊部分選單項目時,會觸發其 Click 事件並顯示對應的提示訊息。執行畫面如下:

透過本系列教學,我們深入了解 .NET 為選單程式設計提供的完整類別體系。掌握這些類別,您可以構建幾乎所有類型的選單應用程式。
MainMenu 與 ContextMenu 類別定義。MenuItem 物件構成,無論何種選單,其核心元素皆為 MenuItem 物件。Menu 基類。Menu 類別提供 MenuItems 集合屬性,讓您能輕鬆管理選單項目(新增、刪除、建立子選單等)。最後,在 C# Windows Forms 程式中,選單的使用極具彈性,結構也相當清晰。熟練掌握各類選單類別的關係與使用方法,將讓您在 Windows Forms 選單程式開發中得心應手,遊刃有餘。