C#表单移动已停止事件

时间:2009-05-31 20:34:56

标签: c# winforms events move wndproc

当表单STOPS被移动时,C#中是否有任何事件触发。不是在它移动的时候。

如果没有事件,是否有办法使用WndProc?

5 个答案:

答案 0 :(得分:13)

移动结束后,ResizeEnd事件将触发。也许你可以使用它。

答案 1 :(得分: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";
}

如果您想要更精确的处理(确切地知道标题栏中何时释放鼠标按钮等),您可能需要深入了解监视窗口消息。

答案 2 :(得分:0)

在触发onmove事件时,只需将标志设置为true即可。如果发生mouseup事件并且标志为true,则表单停止移动。

我承认这可能不适用于用户通过键盘移动表单的情况,但这种情况非常罕见。

答案 3 :(得分:0)

我遇到了与用户控件相同的问题,但它没有ResizeEnd事件。解决方案是覆盖WndProc方法并监听EXITSIZEMOVE。

参见示例here

答案 4 :(得分:0)

我测试了ResizeChanged事件,它工作正常,但我不知道移动和调整大小之间的关系,但它适用于我