在WinForms UI(.NET3.5)中淡出透明图像

应用程序:我正在编写一个小游戏,可以教用户阅读音乐笔记。 游戏很简单。 该应用程序显示一个注释,我的小女儿(目标用户)应该点击与该注释匹配的WinForm GUI上的模拟键盘键。 她有1分钟可以获得尽可能多的好点击。 计算成功和失败。

任务:当她点击一个好/坏键盘键时,我想立即确认她是对还是错, 而不会打断游戏 。 我的计划是显示一个OK或FAILED位图逐渐淡出并在~2秒内变得完全透明。 将位图淡出是一种很好的方法,可以鼓励用户专注于下一个音符,而不再为之前的结果烦恼。

技术问题:如何在具有透明度的Windows窗体上显示位图? 或者,您是否有其他非侵入性,易于实现的想法让用户知道当前的好/坏选择?

正如dylantblack所说,WPF为您提供了更好的工具。 如果您选择使用Windows窗体,这是一个简单的方法,使用计时器淡出图像。 设置一个你喜欢的频率的计时器。 启动计时器,每次增加alpha,并使用增加的alpha通道值绘制白色或任何表单颜色。

int alpha = 0; 

 private void timer1_Tick(object sender, EventArgs e) { if (alpha++ < 255) { Image image = pictureBox1.Image; using (Graphics g = Graphics.FromImage(image)) { Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width); g.DrawLine(pen, -1, -1, image.Width, image.Height); g.Save(); } pictureBox1.Image = image; } else { timer1.Stop(); } } 

在WinForms中,您需要使用计时器或其他东西来设置OK或FAILED控件的不透明度的动画以使其淡出,或者使用GDI +手动绘制它。

如果你还在使用.NET 3.5,我建议使用WPF,这样做更容易。

举个例子,你可以看看Scott Hanselman的Baby Smash应用程序,它是开源的,并且有类似的淡入淡出的概念。