簡體   English   中英

C#Winforms應用程序:從外部應用程序返回(焦點)時的事件處理程序

[英]C# winforms application: event handler when returning (focus) from an external application

我有一個winforms應用程序,該應用程序每次從外部應用程序返回時都必須執行一個操作(即,焦點已從我的應用程序中丟失,請先按Tab鍵切換到另一個程序,然后再返回)。

是否有為此應用程序事件處理程序?

我已經研究過Form的激活和非活動處理程序,但是當我的窗體從自身接收到焦點時(關閉消息框或子窗體時),也會觸發這些處理程序。

Windows會在激活和禁用WM_ACTIVATEAPP消息時將其發送到窗口。 因此,這就是您要處理的,特別是當wParamTRUE (指示激活)時。

WinForms不會將其包裝為一個事件(至少不是我所知道的),因此您需要手動將代碼添加到窗體的窗口過程中:

public class MyForm : Form
{
    // other code

    protected override void WndProc(ref Message m)
    {
        const int WM_ACTIVATEAPP = 0x001C;
        switch (m.Msg)
        {
            case WM_ACTIVATEAPP:
            {
                if (m.WParam.ToInt32() != 0)
                {
                    // Your application's window is being activated, so
                    // do whatever it is you want. Or raise an event.
                    ...
                }
                break;
            }
        }
        base.WndProc(ref m);  // proceed with default processing
    }
}

我只是設置一個布爾值,您可以鎖定讀/寫部分,以確保該操作僅被調用一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM