首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# WinForm 窗體激活事件:Activated vs FormActive 區別與最佳實踐

     編輯:程式設計綜合問答

核心事件對比

事件觸發時機適用場景
Activated窗體成為活動窗體時(獲得焦點、Z-Order 置頂)每次切回窗體需刷新數據、重新驗證權限、恢復定時器
FormActive(不存在)WinForm 無此事件,可能指 Enter(控件獲得焦點)或 VisibleChanged—
Shown首次顯示完成初始化動畫、異步加載數據
VisibleChangedVisible 屬性變化監控顯示/隱藏狀態

模態對話框返回處理

若是 ShowDialog() 打開的子窗體,無需事件,直接在調用行後編寫邏輯:

using (var dlg = new ChildForm()) {
    if (dlg.ShowDialog() == DialogResult.OK) {
        // 子窗體確定返回,這裡處理刷新邏輯
        RefreshData();
    }
}

非模態/MDI 子窗體激活處理

private void MainForm_Activated(object sender, EventArgs e) {
    // 防止重複執行:用標記位或檢查數據版本
    if (needRefresh) {
        RefreshData();
        needRefresh = false;
    }
}

常見坑

  • Activated 觸發頻繁:Alt+Tab 切換、最小化恢復、MessageBox 關閉都會觸發,務必加守衛條件。
  • Deactivated 配對使用:在 Deactivated 中設置 needRefresh = true,形成完整閉環。
  • 不要在 Activated 中做耗時操作:會導致界面卡頓,異步執行或放入 BeginInvoke。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved