亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

應用程序獲得/失去焦點事件

應用程序獲得/失去焦點事件

C#
開滿天機 2022-06-18 17:02:32
我有一個使用無參數 Show()-Methode 打開一些子窗口的應用程序。因此子窗口沒有所有者,這使它們能夠位于主窗口的后面或前面?,F在我想知道整個應用程序是否獲得或失去焦點。是否有一個事件可以做到這一點?我嘗試了 OnActivate/OnDeactivate 和 OnGotFocus/OnLostFocus,它們只報告單個表單的事件。這意味著當應用程序失去焦點時會觸發 OnLostFocus 事件,但如果另一個表單獲得焦點,也會觸發。
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您可以WM_ACTIVATEAPP在主表單中處理并獲得有關激活或停用應用程序的通知:


private const int WM_ACTIVATEAPP = 0x1C;

protected override void WndProc(ref Message m)

{

    if (m.Msg == WM_ACTIVATEAPP)

    {

        if (m.WParam == IntPtr.Zero)

            BeginInvoke(new Action(() => { Text = "Deactivated"; }));

        else

            BeginInvoke(new Action(() => { Text = "Activated"; }));

    }

    base.WndProc(ref m);

}

注意:正如 Hans 在評論中已經提到的,使用上述選項時,應注意不要陷入死鎖和無限循環。確保您閱讀了評論。


Activate作為另一種選擇,您還可以通過處理和Deactivate事件檢測每個表單的激活或停用。當表單停用時,您可以通過檢查是否Form.ActiveForm有值來檢查應用程序是否仍在前臺:


private void f_Deactivate(object sender, EventArgs e)

{

    BeginInvoke(new Action(() =>

    {

        if (Form.ActiveForm == null)

            Text = "App Deactivated"; //App deactivated

        else

            Text = "Still Active";   //App is still active

    }));

}


查看完整回答
反對 回復 2022-06-18
  • 1 回答
  • 0 關注
  • 217 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號