私はwinformsアプリケーションを持っています。 外部 (つまり、フォーカスがアプリケーションから失われ、別のプログラムにaltキーで移動してから戻る)
このためのアプリケーションイベントハンドラはありますか?
フォームのアクティブハンドラと非アクティブハンドラを調べましたが、フォームが自分自身からフォーカスを戻すとき(メッセージボックスを閉じるときやサブフォームを閉じるときに)、これらのハンドラも起動されます。
回答:
回答№1の場合は3Windowsは 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
}
}
回答№2の場合は0
私はちょうどブール値を設定するだけで、アクションが一度呼び出されることを確認するために読み取り/書き込み部分をロックすることができます。