C# WinForms的平滑展开和折叠动画
我正在尝试为我的窗体获得一个平滑的展开和折叠动画。我现在的动画真的很不稳定。这是这张照片的Gif。有没有其他不冻结表单的方法C# WinForms的平滑展开和折叠动画,c#,winforms,C#,Winforms,我正在尝试为我的窗体获得一个平滑的展开和折叠动画。我现在的动画真的很不稳定。这是这张照片的Gif。有没有其他不冻结表单的方法 private void ShowHideToggle_CheckStateChanged(object sender, EventArgs e) { if (ShowHideToggle.Checked) //checked = expand form { ShowHideToggle.Text = "&l
private void ShowHideToggle_CheckStateChanged(object sender, EventArgs e)
{
if (ShowHideToggle.Checked) //checked = expand form
{
ShowHideToggle.Text = "<";
while (Width < originalWidth)
{
Width++;
Application.DoEvents();
}
}
else
{
ShowHideToggle.Text = ">";
while(Width > 24)
{
Width--;
Application.DoEvents();
}
}
}
private void ShowHideToggle\u CheckStateChanged(对象发送方,事件参数e)
{
if(ShowHideToggle.Checked)//Checked=展开表单
{
ShowHideToggle.Text=“”;
而(宽度>24)
{
宽度--;
Application.DoEvents();
}
}
}
创建一个计时器
:
Timer t = new Timer();
t.Interval = 14;
t.Tick += delegate
{
if (ShowHideToggle.Checked)
{
if (this.Width > 30) // Set Form.MinimumSize to this otherwise the Timer will keep going, so it will permanently try to decrease the size.
this.Width -= 10;
else
t.Stop();
}
else
{
if (this.Width < 300)
this.Width += 10;
else
t.Stop();
}
};
创建一个
计时器
:
Timer t = new Timer();
t.Interval = 14;
t.Tick += delegate
{
if (ShowHideToggle.Checked)
{
if (this.Width > 30) // Set Form.MinimumSize to this otherwise the Timer will keep going, so it will permanently try to decrease the size.
this.Width -= 10;
else
t.Stop();
}
else
{
if (this.Width < 300)
this.Width += 10;
else
t.Stop();
}
};
作为补充说明,您应该避免
DoEvents
…平滑。。很抱歉,动画和WinForms不能很好地结合在一起。作为补充说明,您应该避免DoEvents
…平滑。。动画和WinForms不能很好地结合在一起,很抱歉,它有点慢。还有其他想法吗?t.Interval=2代码>这是一种错觉;15-25是更真实的值。增加此宽度。我更改了答案中的代码。也许我遗漏了一些东西…看起来每次单击这个东西时都会附加一个事件处理程序?是的,测试了它,并在它激活几次之后。。。所以我改了,有点慢。还有其他想法吗?t.Interval=2代码>这是一种错觉;15-25是更真实的值。增加此宽度。我更改了答案中的代码。也许我遗漏了一些东西…看起来每次单击这个东西时都会附加一个事件处理程序?是的,测试了它,并在它激活几次之后。。。所以我改了。