C# Form Move Stopped Event

后端 未结 5 1369
深忆病人
深忆病人 2020-12-19 13:53

Is there any event in C# that fires when the form STOPS being moved. Not while its moving.

If there is no event for it, is there a way of doing it with WndProc?

相关标签:
5条回答
  • 2020-12-19 14:16

    Just set a flag to true when onmove events are fired. If a mouseup event happens and the flag is true, the form stopped being moved.

    I admit this probably won't work in the case of a user moving a form via the keyboard, but that's pretty rare.

    0 讨论(0)
  • 2020-12-19 14:19

    The ResizeEnd event fires after a move ends. Perhaps you could use that.

    0 讨论(0)
  • 2020-12-19 14:25

    I tested ResizeChanged event, and it works fine, however I don't know relation between move and resize, but it works for me

    0 讨论(0)
  • 2020-12-19 14:27

    This is not a failsafe solution, but it's pure .NET and it's dead simple. Add a timer to your form, set it to a relatively short delay (100-150 ms seemed OK for me). Add the following code for the Form.LocationChanged and Timer.Tick events:

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

    If you want more exact handling (knowing exactly when the mouse button is release in the title bar and such) you will probably need to dive into monitoring windows messages.

    0 讨论(0)
  • 2020-12-19 14:30

    I had the same problem with a user control, but it does not have the ResizeEnd event. The solution, which worked is to override the WndProc method and listen for EXITSIZEMOVE.

    See example here

    0 讨论(0)
提交回复
热议问题