如何自动隐藏表单

时间:2015-03-06 09:17:01

标签: c# timer thread-sleep

我猜一个非常简单的问题......我无法找到答案。我正在尝试为无边界的WinForm添加一个自动隐藏功能,它位于(0,0),宽度为150.我有以下代码:

    private int dx;

    private void autohide()
    {
        for (dx = 0; dx > -150; dx--)
        {
            this.Width = dx;
            Thread.Sleep(2);
        }
    }

即使之后,使用Thread.Sleep(x),表格也会突然移动到最终宽度而不会产生任何延迟效果。我试图对它产生一些影响。

请帮忙......

1 个答案:

答案 0 :(得分:3)

你面临的问题是因为窗口在任何时候都没有重新绘制,因为你的代码在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();
        }
    }