当表单STOPS被移动时,C#中是否有任何事件触发。不是在它移动的时候。
如果没有事件,是否有办法使用WndProc?
答案 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事件,它工作正常,但我不知道移动和调整大小之间的关系,但它适用于我