雖然 Web 技術備受矚目,但微軟對 Windows 傳統應用程式開發的投資不減反增。Win Forms(Windows Forms)作為 .NET Framework 的核心組件,提供全新的視窗程式設計模型,讓開發者能充分運用 Windows 豐富的使用者介面功能,快速建立高效能的桌面應用程式。
Win Forms 是專為 Windows 用戶端 UI 程式設計的 .NET Framework 命名空間,與 ASP.NET Web Forms 共享設計原則,但類別與實作完全不同。所有控制項繼承自 System.Windows.Forms.Control 基類,內建基本 HWND 功能並處理常見 Windows 訊息。控制項階層結構如下:
Control:基礎 HWND 功能RichControl:繼承 Control,加入版面配置邏輯與繪圖程式碼ScrollableControl:支援捲動ContainerControl:繼承 ScrollableControl,管理子控制項、焦點與 Tab 鍵導航Form:繼承 ContainerControl,為最上層控制項,擁有標題列、系統選單等屬性UserControl:繼承 ContainerControl,作為開發自訂控制項的基礎類別
圖 1. Win Forms 控制項階層結構
Win Forms 消除 Win32 API 中視窗樣式只能在建立時指定或修改的限制。開發者可隨時、以任意順序設定控制項屬性,框架會自動透明地重建視窗並套用適當設定。
Win Forms 事件建立在 Common Language Runtime 的 Delegates(委派)機制上,提供類型安全的函數指標。開發者可直接為任意控制項的任意事件添加委派處理常式,無需建立衍生類別、覆寫方法或實作介面。範例:
public class ButtonClickForm : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
public ButtonClickForm() {
button1 = new System.Windows.Forms.Button();
button1.Click += new System.EventHandler(button1_Click);
this.Controls.Add(button1);
}
private void button1_Click(object sender, EventArgs e) {
MessageBox.Show("button1 clicked!");
}
}
使用 Visual Studio .NET 建立 Win Forms 專案僅產生單一專案檔(如 Form1.cs),無標頭檔、介面定義檔、資源檔等。所有資訊包含於程式碼中,擴展為多表單應用極為容易。編譯過程無中間目標檔,僅有程式碼與受管理的 DLL,亦便於在 IDE 外建置版本。
建立於 Common Language Runtime 之上,Win Forms 支援所有針對 CLR 的語言(C#、VB.NET、C++、COBOL、Eiffel、Perl 等,已超過 17 種),開發者可自由選擇慣用語言建構應用程式。
建立可正確調整大小的表單不再困難。Win Forms 提供兩大配置機制:
Anchor 屬性為列舉型別,可組合值(Top、Bottom、Left、Right)。設定 AnchorStyles.BottomRight 時,控制項與父容器底部和右邊保持固定距離;設定 AnchorStyles.All 則四邊皆固定距離,隨表單縮放自動調整大小。Dock 屬性為 Anchoring 的特例,控制項固定於父容器某一邊(Top、Left、Right、Bottom、Fill)並填滿該邊,父容器大小改變時自動保持。這些功能在設計階段即可透過屬性視窗設定,無需撰寫程式碼。
Win Forms 整合 GDI+,提供抗鋸齒、漸層筆刷、Alpha 混合、影像轉換等進階繪圖功能,大幅優於傳統 GDI。
雖然 Win Forms 封裝大部分 Win32 功能,但仍提供 Control.Handle 屬性取得視窗控制代碼,並支援 P/Invoke 呼叫未封裝的 Win32 API,確保在需要時可直接存取底層系統。
Win Forms 結合了 .NET Framework 的通用應用程式框架、受管理執行環境、整合安全性與物件導向設計原則,並全面支援 Web Services 存取與 ADO.NET 資料感知應用。透過 Visual Studio .NET 共享開發環境,開發者能以任何 .NET 語言高效建構豐富的 Windows 應用程式,是桌面開發的最佳選擇。