[前言:] C#不但繼承了C++、Java等面向對象的強大功能特性,同時還是繼承了VB、Delphi等編程語言的可視化快速開發功能,也稱其為當前第一個完全面向組件的語言。雖然微軟將把C#語言作為在WEB上開發一種主流工具來推廣,但其在傳統客戶/服務器模式的程序設計中,特別是在微軟.Net平台系統下,C#其強大,易用的特性將會成為Windows應用軟件開發人員首選工具。
而在Windows程序設計中,菜單作為用戶與程序交互的首選工具,那麼在.Net中C#又是如何快速的構造Windows Forms中的菜單呢?怎樣才能掌握Windows Forms菜單的實質,在程序設計中做到得心應手,為所欲為的進行窗體菜單程序的開發呢?這篇文章將給您最全面的回答。
一、Windows Forms菜單程序簡介
我們知道,在Windows程序中,菜單是一個必不可少的程序元素。通過使用菜單,可以把對程序的各種操作命令非常規范有效的表示給用戶。一個Windows程序菜單一般包括一個主菜單(主菜單下面包含許多子菜單)及很多彈出式菜單。單擊菜單項程序將執行相應的功能;另外在程序窗體的許多地方單擊鼠標右鍵將會彈出一個針對性的快捷菜單(也可以稱為彈出式菜單),單擊將執行相應的功能,使得軟件的應用變得更加簡單,更加人性化。Microsoft視窗系統及其應用軟件站穩桌面系統及軟件的霸主地位,友好的菜單應用立下不小的功勞。
與傳統的Windows程序一樣,Windows Forms程序中的菜單也包括一般的菜單及彈出菜單兩種。一般的菜單主要是指窗體的主菜單及子菜單。菜單從屬特性外觀及主要功能又可分類:命令式菜單、選擇菜單、鏈接菜單及分隔菜單等等。
大家一定使用過快速開發(RAD)語言工具(如VB、Delphi等)設計過菜單程序。使用這些開發工具,你只需要把用鼠標把菜單控件拖放到窗體上,並通過簡單的菜單外觀及屬性等設置即可完成非常友好的菜單程序開發。在.Net中,C#是支持快速開發的,因此,通過使用相應的開發工具(如Visual Studio .Net)也可以通過簡單的鼠標拖放操作完成大部份的菜單程序設計。當然,由於C#的強大的功能,使用.Net提供的菜單類,你也可以通過記事本等純文本編輯工具就能寫出具有良好用戶界面的菜單程序。
但是只有在充分掌握Windows Forms菜單的實質以後,我們才能在程序設計中做到得心應手,為所欲為的進行窗體菜單程序的開發。
二、菜單程序使用類及體系結構
在.NET類庫中,定義了一個非常龐大的基礎類,以供用戶在各種編程使用。在這些類中,有幾個專為用戶編寫菜單程序所用的類,通過使用這幾個類,你可以設計出自己想要的任何菜單。下面分別進行簡單的介紹:
2.1 Windows Forms菜單類體系結構
.Net類庫中,菜單類的定義體系結構如下:
Object
MarshalByRefObject
Component
Menu
ContextMenu
MainMenu
MenuItem
從上面結構中,我們可以看出,菜單程序設計主要用到三個從Menu類繼承的類:ContextMenu、MainMenu與MenuItem,它們分別封裝了對彈出式菜單、主菜單及菜單項的定義。
另外,.Net類庫還提供了一個Menu.MenuItemCollection集合類來方便對各菜單項的管理。其定義如下:
public class Menu.MenuItemCollection:IList,ICollection,Ienumerable;
2.2 System.Windows.Forms.Menu類
該類是一個抽象類,其是各種類型菜單的基類,封裝了一個Windows Forms菜單的大部份公共屬性。
在菜單應用程序設計中,我們不直接(也不能)使用該類,而是使用其派生類MainMenu、MenuItem、ContextMenu等進行菜單開發;但可以從該類派生出自己更具個性化的菜單。
在該類中有定義了一個非常重要的屬性:MenuItems,其表示該對象所包含的菜單項集合。
2.3 System.Windows.Forms.MenuItem類
該類封裝了一個菜單項中的各種成員,所有的菜單項都是由MenuItem對象構成的。該類包含了對一個菜單項的詳細定義,如菜單項目的各種屬性、響應事件及方法等。MenuItem對象是各種菜單的基本元素,在後面我們將詳細講解菜單項的使用。
2.4 System.Windows.Forms.MainMenu類
作為一個窗體主菜單的容器,其實例產生一個窗體的主菜單對象。你可以直接通過該類的構造函數生成MainMenu對象。其構造函數有兩種形式: