![](/img/trans.png)
[英]How to prevent my C# winforms application from stealing focus when I set the visible properly to true?
[英]C# winforms application: event handler when returning (focus) from an external application
我有一個winforms應用程序,該應用程序每次從外部應用程序返回時都必須執行一個操作(即,焦點已從我的應用程序中丟失,請先按Tab鍵切換到另一個程序,然后再返回)。
是否有為此應用程序事件處理程序?
我已經研究過Form的激活和非活動處理程序,但是當我的窗體從自身接收到焦點時(關閉消息框或子窗體時),也會觸發這些處理程序。
Windows會在激活和禁用WM_ACTIVATEAPP
消息時將其發送到窗口。 因此,這就是您要處理的,特別是當wParam
為TRUE
(指示激活)時。
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.