標籤:
C#實現WinForm表單逐漸顯示效果,這個部落格園裡面已經有其它人已經實現了,原理很簡單,就是通過定時改變表單的透明度(從0到1,即透明度從完全透明到不透明),我這裡也是按照這個思路來實現的,但是我做的這個表單是可複用的,即其它表單繼承自它後,就能實現漸顯效果,代碼如下:
using System;using System.ComponentModel;using System.Windows.Forms;namespace TEMS.Forms{ public partial class FormBase : Form { private Timer formTimer = null; /// <summary> /// 擷取Opacity屬性 /// </summary> [DefaultValue(0)] [Browsable(false)] public new double Opacity { get { return base.Opacity; } set { base.Opacity = 0; } } public FormBase() { InitializeComponent(); formTimer = new Timer() { Interval = 100 }; formTimer.Tick += new EventHandler(formTimer_Tick); base.Opacity = 0; } private void formTimer_Tick(object sender, EventArgs e) { if (this.Opacity >= 1) { formTimer.Stop(); } else { base.Opacity += 0.2; } } private void FormBase_Shown(object sender, EventArgs e) { formTimer.Start(); } }}
以下是自動產生的程式碼:
namespace TEMS.Forms{ partial class FormBase { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.SuspendLayout(); // // FormBase // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 262); this.Name = "FormBase"; this.Text = "FormBase"; this.Shown += new System.EventHandler(this.FormBase_Shown); this.ResumeLayout(false); } #endregion }}
View Code
代碼中我用NEW關鍵字覆蓋了FORM類中的Opacity屬性,使其唯讀並且不可編輯,有人可能會說這個屬性的唯讀代碼寫得不規範,應該是去掉SET訪問器或將SET設為私人,沒錯,標準的是應該這樣做,而我為何不這樣做呢?原因就是如果真正將屬性設為私人,那麼在其它表單繼承它的時候,由於我們一般都是先建一個標準表單,標準表單在建立時表單的屬性若有預設值的會自動產生初始化預設值,標準表單建立後才將基類改為FormBase類,這樣就會造成報錯:Opacity是唯讀,不能賦值,所以我們只可以讓其外面看到是可讀寫,但實際子表單的賦值不會生效,起到唯讀效果,當然了,如果你不覺得麻煩的話,你可以按標準屬性設定,然後每建立一個表單後,請先將Opacity的代碼清除,然後再更改繼承類,這樣也是可以的。
使用就很簡單了,與正常的表單相同,在這裡就不敘述了,大家可將以上代碼複製到自己的項目中,便可直接使用。
其實通過以上代碼的思路,我們可以設計通用的百葉窗轉場效果的表單基類,有空我會試著去實現這些功能,希望大家能支援,謝謝!
C#實現WinForm表單逐漸顯示效果