C#實現WinForm表單逐漸顯示效果

來源:互聯網
上載者:User

標籤:

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表單逐漸顯示效果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.