This might seem like a simple question...
I'm looking for the Label.Opacity property in C# Winforms.
What I wish to do is have a method that fade's out a label gradually. By means of a timer perhaps?
Since there is not Opacity I'm trying to set it's transperency to higher numbers untill it's high enough that the item should be invisible. But I can't seem to make this work.
Currently I have:
public FadeLabel()
{
MyTimer timer = new MyTimer();
this.TextChanged += (s, ea) =>
{
if (timer.IsActive)
{
timer.Reset();
}
else
{
timer.WaitTime.Miliseconds = 500;
timer.Start();
timer.Completed += (a) =>
{
int i = 0;
Timer tm = new Timer();
tm.Interval = 1;
tm.Tick += (sa, aea) =>
{
i++;
this.ForeColor = Color.FromArgb(i, Color.Black);
this.BackColor = Color.FromArgb(i, Color.White);
this.Invalidate();
if (i == 255)
{
tm.Stop();
}
};
tm.Start();
};
}
};
}
This is what I'm using to fade out labels:
label1.Text = "I'm fading out now";
label1.ForeColor = Color.Black;
timer1.Start();
private void timer1_Tick(object sender, EventArgs e)
{
int fadingSpeed = 3;
label1.ForeColor = Color.FromArgb(label1.ForeColor.R + fadingSpeed, label1.ForeColor.G + fadingSpeed, label1.ForeColor.B + fadingSpeed);
if (label1.ForeColor.R >= this.BackColor.R)
{
timer1.Stop();
label1.ForeColor = this.BackColor;
}
}
Maybe not the best solution but I'm still a beginner so this is what I can contribute with. I put timer1.Interval
at minimum and played with fadingSpeed
until it looked good.
One way that I've found to create a smooth fade is to adjust the ForeColor RGB variables using a timer. This gives you control over the duration and allows you to finesse the transition from current ForeColor values to the target values.
private void timer1_Tick(object sender, EventArgs e)
{
// timer interval set to 10 to ensure smooth fading
// declared int: r = 0, g = 215 and b = 180
// target values are r = 32, g = 32 and b = 32 to match BackColor
fade++;
if (fade >= 500) // arbitrary duration set prior to initiating fade
{
if (r < 32) r++; // increase r value with each tick
if (g > 32) g--; // decrease g value with each tick
if (b > 32) b--; // decrease b value with each tick
label1.ForeColor = Color.FromArgb(255, r, g, b);
if (r == 32 && g == 32 && b == 32) // arrived at target values
{
// fade is complete - reset variables for next fade operation
label1.ForeColor = Color.FromArgb(255, 0, 215, 180);
label1.Text = "";
fade = 0;
r = 0;
g = 215;
b = 180;
timer1.Enabled = false;
}
}
}
Does your timer block the UI thread? If so, you won't see anything until after it elapses. A quick way to fix things will be to call Application.DoEvents
instead of this.Invalidate();
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With