表單上有 100 個 CheckBox,需求是:使用者點擊任一核取方塊時,即時將該項資料寫入資料庫。若逐個註冊 Click 事件,程式碼將極其冗長且難以維護。
foreach (CheckBox cb in this.Controls.OfType<CheckBox>())
{
cb.Click += (sender, e) => {
CheckBox curr = sender as CheckBox;
if (curr != null && curr.Checked)
{
// 取得 curr 對應的業務資料(可從 Tag、Name 或 Text 解析)
// 執行參數化 SQL 插入/更新
}
};
}
sender 物件,避免閉包陷阱(注意:此處直接使用 sender 而非迴圈變數 cb,確保正確性)。BindingSource 與 DataTable,實現 UI 與資料層雙向同步,進一步減少樣板碼。async/await 避免 UI 凍結,提升使用者體驗。透過 LINQ 篩選與 Lambda 事件綁定,我們用不到 10 行程式碼解決了「百個 CheckBox 事件處理」的難題,體現了「慣例優於配置」的現代開發哲學。