2015-10-19 51 views
0

我正试图在点击一个按钮后将两个按钮向下和向外翻译。我有它的工作,但它非常波涛汹涌。我怎样才能使这个过渡更流畅? -I正在使用Microsoft Visual Studio 2015年 我使用-The语言是C# 这里是我的过渡代码:如何改善这种转变的外观?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     int speed_increase = 100; 


     if(sleep_button.Top <= 800 || calibrate_button.Top <= 800) 
     { 
      sleep_button.Top += speed_increase; 
      calibrate_button.Top += speed_increase; 

     } 
    } 

我有我的计时器时间间隔设置为1ms的太多,只是因为我知道更大的间隔它变成了碎片。我一直在寻找一个按钮转换教程,并没有发现。如果这是不可能的,有人可以给我一个按钮淡出教程吗?谢谢大家

+0

这是什么平台?的WinForms? WPF? – Dai

+0

Microsoft Visual Studio – mydisplayname

+0

这不是一个平台。什么是项目类型? – Dai

回答

0

您的时间选择已禁用。 1ms太细。尝试20ms左右的标记,这会导致你的代码每秒运行50次,这与50Hz左右的常见刷新率非常接近。

按钮需要滚动多远?需要多长时间?

假设X是滚动的距离,Y是以秒为单位的时间。迭代次数为Y * 50(每秒50次),每步的距离为X/Y。

X = 200像素。
Y = 2秒。每步

距离为:
X /(Y * 50)
200 /(2 * 50)
100分之200
== 2

如果要滚动200个像素超过2秒,您想要在每次迭代时将2添加到每个按钮的Y位置。

我希望这是有道理的。

+0

我需要在1秒内转换700像素。所以700 /(1 * 50)== 14,我将计时器更改为20ms,将speed_change变量更改为14,但动画需要两秒钟以上,并且仍然非常波动。有什么建议么? – mydisplayname

+0

您的程序在转换过程中正在执行其他重要工作吗? – user5151179

+0

不,我已经切换到WPF。应该能够更好地处理转换,并且可以在Windows上运行 – mydisplayname

0

如何将它完全隐藏起来?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     sleep_button.Visible = false; 
     calibrate_button.Visible = false; 
    }