6

当窗体停止移动时,C# 中是否有任何事件触发。不是在它移动的时候。

如果没有事件,有没有办法用 WndProc 做到这一点?

4

5 回答 5

18

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

于 2009-05-31T21:21:44.353 回答
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 回答
2

我对用户控件有同样的问题,但它没有 ResizeEnd 事件。有效的解决方案是覆盖 WndProc 方法并监听 EXITSIZEMOVE。

在此处查看示例

于 2010-09-27T15:52:47.240 回答
0

当 onmove 事件被触发时,只需将标志设置为 true。如果发生 mouseup 事件并且标志为真,则窗体停止移动。

我承认这在用户通过键盘移动表单的情况下可能不起作用,但这种情况很少见。

于 2009-05-31T20:44:57.830 回答
0

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

于 2016-06-16T12:46:43.330 回答