早期 Windows GUI 開發需直接呼叫 Win32 API,程式碼冗長且易錯。MFC (Microsoft Foundation Classes) 封裝了 API,提供物件導向架構,但本質上仍是 Win32 的薄包裝,複雜度高、學習曲線陡峭。隨著 .NET Framework 推出,托管執行環境 (CLR) 接管記憶體與安全性,基礎類別庫 (BCL) 提供統一、豐富的類別,Windows Forms 成為專為建構客戶端 GUI 設計的視窗工具組,而非完整應用程式框架。
#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System::Windows::Forms;
void __stdcall WinMain(HINSTANCE, HINSTANCE, long, int)
{
MessageBox::Show("Hello, Windows Forms");
}
__gc class MyForm : public Form
{
public:
MyForm()
{
Text = "Hello, Windows Forms!";
Button* btn = new Button();
btn->Text = "Click Me!";
btn->Click += new EventHandler(this, &MyForm::button_click);
Controls->Add(btn);
}
void button_click(Object* sender, EventArgs* e)
{
MessageBox::Show("Ouch!");
}
};
void __stdcall WinMain(HINSTANCE, HINSTANCE, long, int)
{
Application::Run(new MyForm());
}
Application::Run 啟動訊息迴圈,直到主表單關閉。托管類別使用 __gc 修飾詞,記憶體由垃圾收集器管理,無需手動 delete。
專案精靈產生 Form1.h (含 InitializeComponent) 與 Form1.cpp (入口點)。設計器將控制項屬性、事件繫結程式碼序列化至 InitializeComponent,標註 // Required method for Designer support - do not modify,自訂初始化請置於建構函式呼叫 InitializeComponent() 之後。
Anchor = Top, Left, Right 使文字方塊隨表單寬度伸縮。從伺服器總管拖曳資料表至設計面,自動產生 SqlConnection、SqlDataAdapter、DataSet。設定 DataGrid.DataSource 與 DataMember,於 Form_Load 呼叫 Fill 即可顯示資料,支援雙向同步更新。
Windows Forms 提供自動版面 (錨點/停駐)、資料繫結、設計器支援等現代化功能,雖非文件導向框架,但配合 .NET Framework 豐富類別庫,極大提升客戶端開發效率。Microsoft 明確轉向托管代碼,擁抱 .NET 將獲得記憶體安全、統一類別庫與更高生產力。