你怎么能 - 在WinForms中 - 创建一个黑色区域(随着时间的推移)失去/获得透明度并不断重绘,以便创建一种过渡?我不想创建一个单独的表单,所以这将非常有用,我可以在黑色区域达到0的透明度时重新排列我的新项目。
左:我现在拥有什么:
右图:程序在启动时的样子
我想要的是:完全黑屏
答案 0 :(得分:2)
覆盖表单的OnPaint
方法,并使用所需的透明度填充表单大小的矩形。在此示例中,transparency
不断增加:
var transparency = 0;
protected override OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// e.Graphics.DrawImage(Image, imageLeft, imageTop, imageWidth, imageHeight);
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(transparency, Black)), this.ClientRectangle);
}
如果您想在Timer
事件中的Tick
事件Invalidate
内强制执行此操作,请执行此操作。
protected void MyTimer_Tick(object sender, eventArgs e) {
transparency++;
MyForm.Invalidate();
}
如果您需要在PictureBox上绘图,则会出现问题。解决它的一种方法是在绘制淡入淡出之前摆脱PictureBox并使用Graphics.DrawImage
绘制图像。如果你想要显示图像但黑色上升到你动物的边缘,那么让它的背景颜色透明,并转换你的图像使用PNG或GIF,动物的所有周围都是透明的原始图片。
要获得更复杂的效果,请查看Google代码上的dot-net-transitions project。它支持各种线性/非线性转换。