定时器在WinForms
本文关键字:WinForms 定时器 | 更新日期: 2023-09-27 18:12:44
我正在使用计时器来创建启动屏幕。我想要做的是让表单淡入淡出。我首先在表单的构造函数中设置表单的透明度为0,并触发表单加载方法中的计时器。现在在我的Timer_Tick
方法中,我一直增加不透明度,比如说,增加0.2。我想我应该在计时器到达间隔的一半时开始降低不透明度,但我无法做到这一点。
我不是很清楚定时器是如何工作的,但我想实现这样的东西:
if(Whatever_Timer_Value_Is <= Interval/2) //Can't achieve this :s
this.Opacity += 2;
else
this.Opacity -=2 ;
. .是否有一种方法可以在任何时刻获得计时器的值?或者还有别的办法吗?请保持简单。我只是个业余爱好者。X (
试试这篇文章中Servy建议的方法。我修改了表单淡出的方法来隐藏表单。
public Form1()
{
InitializeComponent();
this.Opacity = 0;
}
private void Form1_Load(object sender, EventArgs e)
{
ShowMe();
}
private void button1_Click(object sender, EventArgs e)
{
HideMe();
}
private void ShowMe()
{
int duration = 1000;//in milliseconds
int steps = 100;
Timer timer = new Timer();
timer.Interval = duration / steps;
int currentStep = 0;
timer.Tick += (arg1, arg2) =>
{
Opacity = ((double)currentStep) / steps;
currentStep++;
if (currentStep >= steps)
{
timer.Stop();
timer.Dispose();
}
};
timer.Start();
}
private void HideMe()
{
int duration = 1000;//in milliseconds
int steps = 100;
Timer timer = new Timer();
timer.Interval = duration / steps;
int currentStep = 100;
timer.Tick += (arg1, arg2) =>
{
Opacity = ((double)currentStep) / steps;
currentStep--;
if (currentStep <= 0)
{
timer.Stop();
timer.Dispose();
this.Close();
}
};
timer.Start();
}
请记住启动计时器的时间。这样你就可以知道过去了多少时间。
您可以使用Environment.TickCount
。这是一个单调钟。
在计时器中要避免增量计算(如Opacity += 0.2;
),因为不能保证在正确的时间点接收所有刻度或完全接收它们。你最好计算一下经过了多少时间,并从中计算出正确的不透明度值。
尝试为splash创建第二个表单:
Form splash = new Form();
public Form1()
{
InitializeComponent();
this.Visible = false;
splash.Opacity = 0;
splash.Show();
_timerShow();
_timerHide();
this.Visible = true;
}
private async void _timerShow()
{
while(splash.opacity!=1)
{
await Task.Delay(50);
splash.opacity +=.01;
}
}
private async void _timerHide()
{
while(splash.opacity!=0)
{
await Task.Delay(50);
splash.opacity -=.01;
}
}
看看这个,一个c#启动界面的示例:http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C