我有一个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;
}
任何帮助将不胜感激。
答案 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
}
}