本例实现在窗体在打开时逐渐淡入和窗体关闭时淡出的效果:
首先在一个窗体中加入一个按钮,来实现要淡入淡出效果的窗体的显示,代码如下:
private void button1_Click(object sender, EventArgs e) { frm渐变窗体 frm = new frm渐变窗体(); frm.ShowDialog(); }
在要实现渐变效果的窗体中需要放置两个Timer来实现淡入和淡出效果,在此例中使用Timer1来实现淡入效果,Timer2实现淡出效果,淡入淡出窗体代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace 特效窗体 11 { 12 public partial class frm渐变窗体 : Form 13 { 14 //指定窗体完全透明 15 private double m_CurrentOpacity = 0; 16 17 public frm渐变窗体() 18 { 19 InitializeComponent(); 20 this.Opacity = this.m_CurrentOpacity; 21 } 22 23 /// <summary> 24 /// 显示窗体的Timer 25 /// </summary> 26 /// <param name="sender"></param> 27 /// <param name="e"></param> 28 private void timer1_Tick(object sender, EventArgs e) 29 { 30 if (this.m_CurrentOpacity < 1) 31 { 32 //如果当前的透明度小于1,则继续增加透明度 33 this.m_CurrentOpacity += 0.05; 34 this.Opacity = this.m_CurrentOpacity; 35 } 36 else 37 { 38 //如果当前已经完全不透明,则停止timer 39 this.timer1.Stop(); 40 this.timer1.Enabled = false; 41 } 42 } 43 44 /// <summary> 45 /// 窗体关闭渐变效果 46 /// </summary> 47 /// <param name="sender"></param> 48 /// <param name="e"></param> 49 private void frm渐变窗体_FormClosing(object sender, FormClosingEventArgs e) 50 { 51 //**************** 52 //在关闭窗体时有可能打开效果还没有完全透明,所以需要先关闭显示窗体的timer 53 this.timer1.Stop(); 54 this.timer1.Enabled = false; 55 //**************** 56 if (this.m_CurrentOpacity > 0) 57 { 58 //如果当前的透明度>0,则打开降低透明度的Timer2 59 e.Cancel = true; 60 this.timer2.Enabled = true; 61 this.timer2.Start(); 62 } 63 } 64 65 /// <summary> 66 /// 降低透明度 67 /// </summary> 68 /// <param name="sender"></param> 69 /// <param name="e"></param> 70 private void timer2_Tick(object sender, EventArgs e) 71 { 72 if (this.m_CurrentOpacity > 0) 73 { 74 //如果当前的透明度>0,则降低透明度 75 this.m_CurrentOpacity -= 0.05; 76 this.Opacity = this.m_CurrentOpacity; 77 } 78 else 79 { 80 //如果完全不透明,则关闭降低透明度timer,且关闭窗体 81 this.timer2.Stop(); 82 this.timer2.Enabled = false; 83 this.Close(); 84 } 85 } 86 87 } 88 }