| 事件 | 觸發時機 | 適用場景 |
|---|---|---|
| Activated | 窗體成為活動窗體時(獲得焦點、Z-Order 置頂) | 每次切回窗體需刷新數據、重新驗證權限、恢復定時器 |
| FormActive(不存在) | WinForm 無此事件,可能指 Enter(控件獲得焦點)或 VisibleChanged | — |
| Shown | 首次顯示完成 | 初始化動畫、異步加載數據 |
| VisibleChanged | Visible 屬性變化 | 監控顯示/隱藏狀態 |
若是 ShowDialog() 打開的子窗體,無需事件,直接在調用行後編寫邏輯:
using (var dlg = new ChildForm()) {
if (dlg.ShowDialog() == DialogResult.OK) {
// 子窗體確定返回,這裡處理刷新邏輯
RefreshData();
}
}
private void MainForm_Activated(object sender, EventArgs e) {
// 防止重複執行:用標記位或檢查數據版本
if (needRefresh) {
RefreshData();
needRefresh = false;
}
}
Deactivated 中設置 needRefresh = true,形成完整閉環。BeginInvoke。