Question

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?

Was it helpful?

Solution

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

OTHER TIPS

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.

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.

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top