如何自动隐藏表单

本文关键字:表单 隐藏 何自动 | 更新日期: 2024-10-22 02:32:57

我想我有一个非常简单的问题。。。对此我无法找到答案。我正在尝试为一个位于(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)之后,Form也只会捕捉到最终的Width,而不会产生任何延迟效果。我正试图对它施加一些影响。

请帮忙。。。

如何自动隐藏表单

您面临的问题是因为窗口在任何时候都不会重新绘制自己,因为您的代码直到dx为150才退出autohide()例程,所以在重新绘制最终位置之前会有一个延迟。

您可能还想更改位置而不是宽度。

更好的选择是启动一个计时器,然后在每次触发时更改位置,这将导致更改动画化:

    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();
        }
    }