整理 C# 開發中常遇到的五大類問題,涵蓋 Windows Forms 視窗間資料傳遞、Main 方法靜態特性、記憶體回收機制、表單版面錨定、正則表達式驗證等實用主題。
在建立子視窗時,透過建構函式傳遞資料:
public ChildForm(string initData) : this()
{
this.txtData.Text = initData;
}
關鍵概念:值型別(繼承 ValueType)宣告即配置記憶體;參考型別(繼承 object)宣告僅配置參考,需 new 實例化。
Form.Owner 屬性取得擁有者視窗,轉型後存取公共成員。將應用程式設定載入靜態類別,所有視窗透過靜態屬性/方法存取:
public static class AppContext
{
public static string ConnectionString { get; set; }
public static User CurrentUser { get; set; }
}
程式啟動時尚未建立任何實例,非靜態成員(實例成員)無法被呼叫。因此進入點 Main 必須宣告為 static。Main 內呼叫的其他成員亦需為靜態,除非先實例化對應類別。
new 所在的作用域結束前,物件通常不會被回收;作用域結束後,若無其他引用,下次 GC 執行時可能被回收並壓縮堆疊。透過 Anchor 定義控制項邊緣相對表單邊緣的固定方式,無需撰寫 Resize 事件代碼:
| 屬性值 | 行為 |
|---|---|
| Left = True | 左邊固定距離 |
| Top = True | 上邊固定距離 |
| Right = True | 右邊隨表單拉伸 |
| Bottom = True | 下邊隨表單拉伸 |
設計階段即可預覽效果,極大簡化自適應版面開發。
使用 System.Text.RegularExpressions.Regex 驗證 Email、電話、身分證字號等格式:
string emailPattern = @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$";
bool isValid = Regex.IsMatch(input, emailPattern);
控制項的 BringToFront()、SendToBack() 對應設計器工具列的「移至最上層/最下層」,也可在屬性視窗調整 TabIndex 間接影響繪製順序。
掌握這些核心概念,能解決 C# 開發中 80% 的常見困惑,讓程式碼更健壯、維護更輕鬆。