如何使用c#淡入/淡出包含内容的面板

时间:2011-09-16 16:00:23

标签: c# .net winforms

我有一个Panel作为容器,这个面板上有一张图片作为背景,在容器面板中,我有另一个面板,我会在标签上放一些信息,这些信息会随时间变化,我想要的是当新信息即将显示时的转换,使用旧信息淡出信息面板,然后使用新信息淡入同一面板。在淡出信息面板时,我将能够看到容器面板的背景图像。两个面板都有BorderStyle = FixedSingle,信息面板也有背景颜色。

现在我的问题是:有没有办法淡入/淡出信息面板和整个内容?

我正在网上搜索,我找到了一种处理这种效果的方法,使用了面板的背景颜色,但它根本不起作用,此外,内容仍然存在,因为它们只是试图淡化backcolor属性:

Timer tm = new Timer();
    private void Form1_Shown(object sender, EventArgs e)
    {
        tm.Interval = 100;
        tm.Tick += new EventHandler(timer1_Tick);
        tm.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        int aa = 0;
        panel2.BackColor = Color.FromArgb(aa, 255, 0, 0);

        aa += 10;
        if (aa > 255)
            tm.Enabled = false;
    }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我不相信你可以设置单个控件的不透明度。表单本身具有不透明性,但我认为您不想淡出整个控件。

您可以创建支持不透明度的自定义控件...这是一个示例: http://www.slimee.com/2009/02/net-transparent-forms-and-controls-with.html

我相信这个实现将适用于面板中的子控件(因为它在控件占用的矩形区域上工作)。如果我错了,你必须处理所有儿童控制,作为你过度行为的一部分。

正如其他人所说,让它看起来“顺畅”可能需要做很多工作。希望有人会有更好的答案。

答案 1 :(得分:2)

正如其他答案中所建议的那样,你不能(很容易没有你自己的控制)淡入/淡出面板。

您可以在启动时淡入或淡出表格,或者使用淡入或淡出的模态对话框。

淡入

    private void FadeIn_Tick(object sender, EventArgs e)
    {
        this.Opacity += .08;
        if (this.Opacity >= 1)
        {
            FadeIn.Stop();
        }
    }

淡出

    private void FadeOut_Tick(object sender, EventArgs e)
    {
        this.Opacity -= .08; //Decrease opacity
        if (this.Opacity <= 0) //While it is not 0
        {
            FadeOut.Stop(); //Stop!
            this.Close(); //Close the form
        }
    }