如何自动隐藏表单
How do I autohide a form
我想我有一个非常简单的问题...我找不到答案。我正在尝试为位于 (0,0) 宽度为 150 的无边界 WinForm 添加自动隐藏功能。我有以下代码:
private int dx;
private void autohide()
{
for (dx = 0; dx > -150; dx--)
{
this.Width = dx;
Thread.Sleep(2);
}
}
即使在使用 Thread.Sleep(x)
之后,表单也只是快速关闭到最终宽度,而没有 giving/having 任何延迟效果。我正在尝试对其施加一些影响。
请帮忙...
您面临的问题是因为 window 在任何时候都不会重新绘制自身,因为您的代码在 dx 为 150 之前不会退出 autohide() 例程,因此它只会有一个在最终位置重新绘制之前延迟。
您可能还想更改位置而不是宽度。
更好的选择是启动一个 Timer,然后在每次触发时改变位置,这会导致改变被动画化:
private Timer t;
private int step = 1;
private void autohide()
{
t = new Timer();
t.Interval = 2;
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
if (this.Location.X > 0 - this.Width)
{
this.Location = new Point(this.Location.X - step, this.Location.Y);
}
else
{
t.Stop();
}
}
我想我有一个非常简单的问题...我找不到答案。我正在尝试为位于 (0,0) 宽度为 150 的无边界 WinForm 添加自动隐藏功能。我有以下代码:
private int dx;
private void autohide()
{
for (dx = 0; dx > -150; dx--)
{
this.Width = dx;
Thread.Sleep(2);
}
}
即使在使用 Thread.Sleep(x)
之后,表单也只是快速关闭到最终宽度,而没有 giving/having 任何延迟效果。我正在尝试对其施加一些影响。
请帮忙...
您面临的问题是因为 window 在任何时候都不会重新绘制自身,因为您的代码在 dx 为 150 之前不会退出 autohide() 例程,因此它只会有一个在最终位置重新绘制之前延迟。
您可能还想更改位置而不是宽度。
更好的选择是启动一个 Timer,然后在每次触发时改变位置,这会导致改变被动画化:
private Timer t;
private int step = 1;
private void autohide()
{
t = new Timer();
t.Interval = 2;
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
if (this.Location.X > 0 - this.Width)
{
this.Location = new Point(this.Location.X - step, this.Location.Y);
}
else
{
t.Stop();
}
}