菜單是程序開發中經常使用的界面元素,合理利用菜單不但可以使用戶非常方便地使用程序的功能,而且還能提高工作效率。
001 帶歷史信息的菜單
要實現保存最近打開的文件,可以將在菜單中最近打開文件的文件名和路徑保存到事先建立的 *.ini 文件中,軟件啟動時讀取 *.ini 文件中的數據建立數組菜單,即可實現顯示歷史菜單的功能。
:要建立一個帶歷史信息的菜單,必須首先添加一個 MenuStrip 菜單控件,創建一個“文件”主菜單,在其下面創建打開、關閉所有、退出等菜單選項。同時向窗體添加 OpenFileDialog 控件,並將主窗體的 IsMdiContainer 屬性設為 True。
namespace _001_MenuHistory { public partial class Form1 : Form { string address; public Form1() { InitializeComponent(); address = System.Environment.CurrentDirectory; } //將打開文件路徑寫入INI文件 private void 打開ToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog1.FileName = ""; //設定打開文件對話框的初始化內容為空 this.openFileDialog1.ShowDialog(); //顯示打開文件對話框 StreamWriter s = new StreamWriter(address + "\\Menu.ini", true); //定義一個以一種特定編碼向流中寫入數據的對象 s.WriteLine(openFileDialog1.FileName); //寫入INI文件 s.Flush(); //清理當前編寫器的所有緩沖區,並使所有緩沖數據寫入基礎流 s.Close(); //關閉當前的StreamWriter對象和基礎流 ShowWindows(openFileDialog1.FileName); //調用自定義方法ShowWindows } //讀取INI文件並將信息加入菜單 private void Form1_Load(object sender, EventArgs e) { StreamReader sr = new StreamReader(address + "\\Menu.ini"); //聲明一個以一種特定編碼從字節流中讀取字符的對象 int i = this.文件ToolStripMenuItem.DropDownItems.Count - 2; //定義一個ini型變量i並為其賦值 while (sr.Peek() >= 0) //讀取INI文件 { ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine()); //聲明一個ToolStripMenuItem對象 this.文件ToolStripMenuItem.DropDownItems.Insert(i, menuitem); //向菜單中添加內容 i++; //int型變量i遞增 menuitem.Click += new EventHandler(menuitem_Click); //為菜單中的可選項生成處理程序 } sr.Close(); //關閉當前的StreamReader對象和基礎流 } private void menuitem_Click(object sender, EventArgs e) { ToolStripMenuItem menu = (ToolStripMenuItem)sender; ShowWindows(menu.Text); } //自定義方法ShowWindows用來加載背景圖片並顯示窗體 public void ShowWindows(string fileName) { Image p = Image.FromFile(fileName); //定義一個Image型的變量p Form f = new Form(); //定義一個Form型的變量f f.MdiParent = this; //設定當前窗體為MDI父窗體 f.BackgroundImage = p; //為窗體f設置背景圖片 f.Show(); //顯示窗體 } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } }
002 菜單動態合並
C#4.0 中已經將彈出菜單封裝為 Context MenuStrip 控件,利用該控件中的 Items 對象可以操作菜單中的菜單項。該對象是 ToolStripMenuItem 類型,使用 Item.AddRange 方法可以向彈出菜單中添加菜單項。
創建一個項目,默認窗體為 Form1,向 Form1 窗體中添加一個 MenuStrip 控件用來設計菜單,同時向窗體中添加一個 ContextMenuStrip 控件用來設計右鍵菜單。再添加一個窗體 Form2,同時向窗體中添加 ContextMenuStrip 控件用來設計右鍵菜單,Modifiers 屬性設置為 Public。
namespace UniteMenu { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void toolStripMenuItem1_Click(object sender, EventArgs e) { Form2 f = new Form2(); //定義一個Form型的對象f f.MdiParent = this; //設置f的MDI父窗體 f.Show(); //顯示子窗體 f.Resize += new EventHandler(f_Resize); //為窗體f生成調整大小的處理程序 } void f_Resize(object sender, EventArgs e) { Form2 f = (Form2)sender; //將sender類型的變量轉換為Form型並賦值給f ToolStripMenuItem item = new ToolStripMenuItem(); //聲明一個ToolStripMenuItem型的對象item for (int i = 0; i < f.contextMenuStrip2.Items.Count; ) //循環遍歷菜單中的每一項 { item.DropDownItems.Add(f.contextMenuStrip2.Items[i]); //向菜單中添加新內容 } this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {item}); //向菜單項中添加集合 } } }
003 像開始菜單一樣漂亮的菜單
在 C#4.0 中,MenuStrip 控件中的子項 ToolStripMenuItem 已經包括了左側的彩條,實現像開始菜單一樣的菜單非常容易,如果想改變左側豎著的彩條,只要給對應的菜單項設置相應的圖片即可。
右鍵添加要設置圖片的菜單項(如:Sava As),選擇“Set Image...”,然後 Import 一張本地的圖片。
004 任務欄托盤菜單
要實現程序啟動時出現在系統托盤中,必須要為窗體添加 NotifyIcon 控件和 ContextMenuStrip 控件,必須為 NotifyIcon 控件的 Icon屬性設置圖標。
1.創建一個項目,將其命名為 NotifyIconSl,默認窗體為 Form1。
2.向 Form1 窗體添加 NotifyIcon 控件和 ContextMenuStrip 控件,並為 ContextMenuStrip 控件添加子項。
3.選擇 NotifyIcon 控件,在其屬性窗口中獎 ContextMenuStrip 屬性設置為添加到窗體上的 ContextMenuStrip 控件,並為 Icon 屬性設置圖片。
005 可以拉伸的菜單界面
要實現可以拉伸的菜單,關鍵是要使用一個開關變量,同時調用 ShowDropDown 方法,顯示操作後的結果。
創建一個項目,默認窗體為 Form1,向 Form1 窗體中添加一個 MenuStrip 控件,選中 MenuStrip 控件為其添加子項,雙擊“展開(關閉)其他項”為其單擊事件添加處理代碼。
namespace _005_HideMenu { public partial class Form1 : Form { int i = 2; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //啟動時設置以下菜單項隱藏 this.設置密碼ToolStripMenuItem.Visible = false; this.添加用戶ToolStripMenuItem.Visible = false; this.忘記密碼ToolStripMenuItem.Visible = false; this.修改密碼ToolStripMenuItem.Visible = false; this.員工錄入ToolStripMenuItem.Visible = false; } private void 展開關閉其他項ToolStripMenuItem_Click(object sender, EventArgs e) { switch (i) { case 1: //設置以下菜單項隱藏 this.設置密碼ToolStripMenuItem.Visible = false; this.添加用戶ToolStripMenuItem.Visible = false; this.忘記密碼ToolStripMenuItem.Visible = false; this.修改密碼ToolStripMenuItem.Visible = false; this.員工錄入ToolStripMenuItem.Visible = false; i = 2; //顯示與ToolStripDropDownItem有關的ToolStripDropDownItem控件 this.操作ToolStripMenuItem.ShowDropDown(); break; case 2: this.設置密碼ToolStripMenuItem.Visible = true; this.添加用戶ToolStripMenuItem.Visible = true; this.忘記密碼ToolStripMenuItem.Visible = true; this.修改密碼ToolStripMenuItem.Visible = true; this.員工錄入ToolStripMenuItem.Visible = true; i = 1; //顯示與ToolStripDropDownItem有關的ToolStripDropDownItem控件 this.操作ToolStripMenuItem.ShowDropDown(); break; } } } }
006 級聯菜單
制作級聯菜單需要使用 MenuStrip 控件。
:在使用級聯菜單時最好不要超過5層,否則用戶在使用時會感覺很不方便。
創建一個項目,默認窗體為 Form1。在 Form1 窗體添加 MenuStrip 控件,選中 MenuStrip 控件為其添加子項和級聯子項。