/ / C#winforms application:外部アプリケーションからフォーカスを戻すときのイベントハンドラ - c#、winforms、event-handling、focus

C#winformsアプリケーション:外部アプリケーションからフォーカスを戻すときのイベントハンドラ - C#、winforms、イベントハンドリング、フォーカス

私はwinformsアプリケーションを持っています。 外部 (つまり、フォーカスがアプリケーションから失われ、別のプログラムにaltキーで移動してから戻る)

このためのアプリケーションイベントハンドラはありますか?

フォームのアクティブハンドラと非アクティブハンドラを調べましたが、フォームが自分自身からフォーカスを戻すとき(メッセージボックスを閉じるときやサブフォームを閉じるときに)、これらのハンドラも起動されます。

回答:

回答№1の場合は3

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
}
}

回答№2の場合は0

私はちょうどブール値を設定するだけで、アクションが一度呼び出されることを確認するために読み取り/書き込み部分をロックすることができます。