C# 表格不';t使用计时器事件平滑调整大小

C# 表格不';t使用计时器事件平滑调整大小,c#,winforms,C#,Winforms,我在表单底部有一个网格控件,如果用户想显示/隐藏它,可以显示或隐藏它。因此,一种方法是很好地使用表单的自动大小,并将网格的可视属性更改为true或false,。。。 但我想让它凉快一点!所以我希望窗体的大小调整得慢一点,就像车库门一样!所以我在表格上放了一个计时器,开始在计时器滴答作响的时候一点一点地增加表格的高度 所以,当用户说显示/隐藏网格时,会出现如下情况: timer1.Enabled = true; timer1.Start(); 在timer_click事件中,类似

我在表单底部有一个网格控件,如果用户想显示/隐藏它,可以显示或隐藏它。因此,一种方法是很好地使用表单的自动大小,并将网格的可视属性更改为true或false,。。。 但我想让它凉快一点!所以我希望窗体的大小调整得慢一点,就像车库门一样!所以我在表格上放了一个计时器,开始在计时器滴答作响的时候一点一点地增加表格的高度

所以,当用户说显示/隐藏网格时,会出现如下情况:

    timer1.Enabled = true;
    timer1.Start();
在timer_click事件中,类似这样的事件:

    this.Height = this.Height + 5;
    if(this.Height -10 > ErrorsGrid.Bottom )
        timer1.Stop();

它可以工作,但仍然不完美。例如,它在一开始就滞后,停止调整大小(如一秒钟),然后再次开始调整大小……因此,现在考虑到这个想法,您建议我应该做哪些修改,以使它看起来更好,工作更好?

试着改用
系统。Timers。Timer
。您可以阅读更多有关可用.net计时器之间差异的信息,但我认为您的问题归结为:

“[System.Windows.Forms.Timer]此计时器类引发的事件与同步 尊重Windows窗体应用程序中的其余代码。这意味着 正在执行的应用程序代码永远不会被 此计时器类的实例

这不会是System.Timers.Timer的问题。只需确保将该对象的
SynchronizingObject
设置为表单,以便在UI线程上执行经过的事件

例如:

public partial class Form1 : Form
{
    System.Timers.Timer timer = new System.Timers.Timer(100);

    public Form1()
    {
        InitializeComponent();

        timer.AutoReset = true;
        timer.SynchronizingObject = this;
        timer.Elapsed += timer_Elapsed;
    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        this.Height += 5;

        if (this.Height -10 > ErrorsGrid.Bottom)
            timer.Stop();
    }

    void button1_Click(object sender, EventArgs e)
    {
        timer.Start();
    }
}

你试过使用另一个计时器类吗?有帮助吗?我有点假设你最初使用的是哪个,因为它有一个
滴答声
事件。好消息,我不知道这是关于计时器的。我一去上班就去试试。现在在Mac上,无法在其中执行VS:)