フォームの移動が停止したときに発生する C# のイベントはありますか。動いている間ではありません。
そのためのイベントがない場合、WndProc でそれを行う方法はありますか?
ResizeEnd イベントは、移動が終了した後に発生します。おそらくあなたはそれを使うことができます。
ユーザーコントロールでも同じ問題が発生しましたが、ResizeEndイベントがありません。うまくいった解決策は、WndProcメソッドをオーバーライドし、EXITSIZEMOVEをリッスンすることです。
こちらの例をご覧ください
これはフェイルセーフ ソリューションではありませんが、純粋な .NET であり、非常にシンプルです。フォームにタイマーを追加し、比較的短い遅延に設定します (100 ~ 150 ミリ秒は問題ないように思えました)。Form.LocationChanged および Timer.Tick イベントに次のコードを追加します。
private void Form_LocationChanged(object sender, EventArgs e)
{
if (this.Text != "Moving")
{
this.Text = "Moving";
}
tmrStoppedMoving.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
tmrStoppedMoving.Start();
this.Text = "Stopped";
}
より正確な処理 (マウス ボタンがタイトル バーで離されたときなどを正確に知ること) が必要な場合は、おそらく Windows メッセージの監視に飛び込む必要があります。
ResizeChanged イベントをテストしましたが、正常に動作しますが、移動とサイズ変更の関係はわかりませんが、私にとってはうまくいきます
onmove イベントが発生したときにフラグを true に設定するだけです。mouseup イベントが発生し、フラグが true の場合、フォームの移動が停止しました。
ユーザーがキーボードを介してフォームを移動する場合、これはおそらく機能しないことは認めますが、それは非常にまれです。