| 模型 | 運行環境 | 典型場景 |
|---|---|---|
| Web Forms | 瀏覽器/IIS | 企業門戶、電商、管理系統 |
| Windows Forms | 桌面客戶端 (Win98/NT/2000+) | ERP 客戶端、工具軟件、富交互應用 |
| Web Service | HTTP/SOAP | 異構系統集成、移動端後端 |
| Windows Service | 後台服務進程 | 定時任務、監控代理、消息處理 |
static void Main() {
Application.Run(new MainForm()); // 啟動消息循環,管理輸入/事件分發
}
// Application 封裝:Run、Exit、DoEvents、消息過濾、線程異常處理
Application 為靜態類,不可實例化,核心職責:消息循環驅動。
public class MyForm : Form {
private Button _btn;
public MyForm() {
_btn = new Button { Text = "Test", Location = new Point(100,100) };
_btn.Click += (s,e) => MessageBox.Show("Clicked!");
Controls.Add(_btn);
Text = "Hello World!";
}
}
所有控件繼承 Control,擁有 Controls 集合構建視覺樹。
public event EventHandler Click;delegate void EventHandler(object sender, EventArgs e);btn.Click += Handler; / btn.Click -= Handler;sender 觸發源,EventArgs 承載數據(如 MouseEventArgs)// 定義
public bool ControlBox { get; set; }
// 使用
form.ControlBox = false; // 隱藏標題欄控制盒
屬性支撐設計器屬性網格,極大提升 RAD 效率。
Control:渲染、輸入、事件、佈局基礎UserControl(組合)或 Control(繪製)Application.Run(new MainForm()),ClickOnce/XCopy 部署using System;
using System.Drawing;
using System.Windows.Forms;
public class HelloWorld : Form {
private Button _button1;
public HelloWorld() {
_button1 = new Button {
Text = "TestButton",
Location = new Point(100, 100)
};
_button1.Click += (sender, e) => MessageBox.Show("You have clicked the Button", "Information");
Text = "Hello World!";
Controls.Add(_button1);
}
[STAThread]
static void Main() {
Application.Run(new HelloWorld());
}
}
csc HelloWorld.cs // 生成 HelloWorld.exe
HelloWorld // 運行彈出窗體,點擊按鈕顯示消息框
Control.Invoke/BeginInvoke、BackgroundWorker、async/await 配合 TaskScheduler.FromCurrentSynchronizationContext()BindingSource、BindingList<T>、雙向同步、格式化/驗證OnPaint、GDI+、雙緩衝、點擊測試CultureInfo、RTL 支持Windows Forms 雖非最新技術,但在企業級桌面客戶端領域仍具備成熟生態、豐富控件庫、低維護成本的不可替代優勢。