如何在 C# 中使用计时器使标签淡入淡出?
How can you make a label fade in and out using timers in C#?
我正在尝试使用两个计时器来模拟表单上标签的褪色。一旦第一个计时器中的颜色值达到 255,第二个计时器就会被激活以反转第一个计时器所做的并将颜色值恢复为 0。调试时,它按预期工作两个 1 轮半,然后给出报错超过255。这是因为走完:timer1>timer2>timer1,并没有走到timer2,所以值一直在增加。可能是什么问题?
这是在 public Form1():
timer1.Tick += new EventHandler(timer1_Tick);
timer2.Tick += new EventHandler(timer2_Tick);
剩下的是:
Timer timer1 = new Timer();
Timer timer2 = new Timer();
int r = 0;
int g = 0;
int b = 0;
int fade = 0;
private void timer1_Tick(object sender, EventArgs e)
{
fade++;
if (fade <= 500) //just a number above 255
{
r++;
g++;
b++;
lblReboot.ForeColor = Color.FromArgb(255, r, g, b);
if (r == 255)
{
fade = 0;
r = 255;
g = 255;
b = 255;
timer1.Stop();
timer1.Enabled = false;
timer2.Enabled = true;
timer2.Interval = 10;
timer2.Start();
}
}
}
private void timer2_Tick(object sender, EventArgs e)
{
fade++;
if (fade <= 500)
{
r--;
g--;
b--;
lblReboot.ForeColor = Color.FromArgb(255, r, g, b);
}
if (r == 0)
{
fade = 0;
r = 0;
g = 0;
b = 0;
timer2.Stop();
timer2.Enabled = false;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Enabled = true;
timer1.Interval = 10;
timer1.Start();
}
}
这是因为您在 timer2_Tick 中改变方向时添加了多个 timer1.Tick 事件处理程序。当您在第二次通过时达到 r == 255 - 尽管您停止了 timer1 并启动了 timer2,但您仍然有另一个滴答事件等待处理,这会将计数增加到 256。
删除此行
timer1.Tick += new EventHandler(timer1_Tick);
来自 timer2_Tick。
我正在尝试使用两个计时器来模拟表单上标签的褪色。一旦第一个计时器中的颜色值达到 255,第二个计时器就会被激活以反转第一个计时器所做的并将颜色值恢复为 0。调试时,它按预期工作两个 1 轮半,然后给出报错超过255。这是因为走完:timer1>timer2>timer1,并没有走到timer2,所以值一直在增加。可能是什么问题?
这是在 public Form1():
timer1.Tick += new EventHandler(timer1_Tick);
timer2.Tick += new EventHandler(timer2_Tick);
剩下的是:
Timer timer1 = new Timer();
Timer timer2 = new Timer();
int r = 0;
int g = 0;
int b = 0;
int fade = 0;
private void timer1_Tick(object sender, EventArgs e)
{
fade++;
if (fade <= 500) //just a number above 255
{
r++;
g++;
b++;
lblReboot.ForeColor = Color.FromArgb(255, r, g, b);
if (r == 255)
{
fade = 0;
r = 255;
g = 255;
b = 255;
timer1.Stop();
timer1.Enabled = false;
timer2.Enabled = true;
timer2.Interval = 10;
timer2.Start();
}
}
}
private void timer2_Tick(object sender, EventArgs e)
{
fade++;
if (fade <= 500)
{
r--;
g--;
b--;
lblReboot.ForeColor = Color.FromArgb(255, r, g, b);
}
if (r == 0)
{
fade = 0;
r = 0;
g = 0;
b = 0;
timer2.Stop();
timer2.Enabled = false;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Enabled = true;
timer1.Interval = 10;
timer1.Start();
}
}
这是因为您在 timer2_Tick 中改变方向时添加了多个 timer1.Tick 事件处理程序。当您在第二次通过时达到 r == 255 - 尽管您停止了 timer1 并启动了 timer2,但您仍然有另一个滴答事件等待处理,这会将计数增加到 256。
删除此行
timer1.Tick += new EventHandler(timer1_Tick);
来自 timer2_Tick。