2

所以我想通过单击按钮来更改表单大小,还希望它看起来像一个小动画,所以这段代码可以帮助我

while (desiredWidht < this.Width)
{
    this.Width += 5;                    
    Thread.Sleep(4);
}

但有一个问题。此代码以正确的方向扩展表单。我怎么能在左方向做同样的事情..我尝试扩展表单然后将其向左移动并将所有控件向右移动但问题是在表单达到某些宽度后控件由于某种原因消失了并且当扩展方法完成时他们又出现了。我无法弄清楚是什么问题。我这样做的正确方法是什么。

4

2 回答 2

0
const int MAX_STEP = 5;

while (Width < desiredWidth)
{
    int step = Math.Min(MAX_STEP, desiredWidth - Width);
    SetBounds(Left - step, Top, Width + step, Height);
    Refresh();
    Application.DoEvents();
    Thread.Sleep(4);
}

在这里,我做了几件事,首先是定义最大步长并设置步长,以便您获得所需的确切宽度。与过度回答相比,这里的最大变化是 SetBounds 它将自动设置所有属性,我的示例程序中没有其他任何事情发生,所以我看到右侧的 gitter 回来并在我设置宽度时形成左边(以前在测试解决方案时)。您可能在其他一些过程中遇到了这个问题,因此您需要引发事件 Application.DoEvents(),就像@banana 提到的那样,您可以执行 Refresh(),这应该会被自动调用,但再次调用它应该不会有什么坏处. 另外,我在desiredWidth 中正确拼写了Width,这让我发疯了!“this.Property”或“this.Method”是“this”的冗余限定符

**注意,查看 ClientSize.Width 因为它通常是人们想要的,您可能还想查看 SetDesktopBounds

于 2013-02-17T16:20:19.407 回答
0

尝试 -

this.Refresh();

移动控件后。

于 2013-02-17T15:15:51.747 回答