创建淡出标签

The*_*der 7 c# label opacity fadeout winforms

这似乎是一个简单的问题......

我正在寻找C#Winforms中的Label.Opacity属性.

我想做的是有一种逐渐消失标签的方法.通过计时器或许?

由于没有Opacity我试图将它的transperency设置为更高的数字,直到它足够高,该项目应该是不可见的.但我似乎无法做到这一点.

目前我有:

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();
            };
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

Zer*_*ato 9

这就是我用来淡出标签的方法:

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

也许不是最好的解决方案,但我仍然是初学者,所以这是我可以贡献的.我把它放在timer1.Interval最低限度并玩,fadingSpeed直到它看起来很好.


Ant*_*lev 3

你的计时器会阻塞 UI 线程吗?如果是这样,直到它过去之后你才会看到任何东西。解决问题的一个快速方法是调用Application.DoEvents而不是this.Invalidate();.