6

フォームの移動が停止したときに発生する C# のイベントはありますか。動いている間ではありません。

そのためのイベントがない場合、WndProc でそれを行う方法はありますか?

4

5 に答える 5

18

ResizeEnd イベントは、移動が終了した後に発生します。おそらくあなたはそれを使うことができます。

于 2009-05-31T21:21:44.353 に答える
2

ユーザーコントロールでも同じ問題が発生しましたが、ResizeEndイベントがありません。うまくいった解決策は、WndProcメソッドをオーバーライドし、EXITSIZEMOVEをリッスンすることです。

こちらの例をご覧ください

于 2010-09-27T15:52:47.240 に答える
2

これはフェイルセーフ ソリューションではありませんが、純粋な .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 メッセージの監視に飛び込む必要があります。

于 2009-05-31T21:15:28.267 に答える
0

ResizeChanged イベントをテストしましたが、正常に動作しますが、移動とサイズ変更の関係はわかりませんが、私にとってはうまくいきます

于 2016-06-16T12:46:43.330 に答える
0

onmove イベントが発生したときにフラグを true に設定するだけです。mouseup イベントが発生し、フラグが true の場合、フォームの移動が停止しました。

ユーザーがキーボードを介してフォームを移動する場合、これはおそらく機能しないことは認めますが、それは非常にまれです。

于 2009-05-31T20:44:57.830 に答える