天天看點

如何美化你的.net 應用程式

        利用.net技術能夠快速開發出應用程式,但是如果應用微軟的那一套技術,做出來的程式大多數程式員恐怕都會有一種千篇一律的感覺:按鈕還是那個按鈕(隻是文字不同),文本框還是那個文本框, 下拉清單還是那個下拉清單........跟系統裡的沒有什麼兩樣,不管程式怎麼樣,至少這個界面沒什麼新意。

        誠然,目前也有不少第三方的控件,如Xceed Ultimate Suite、ComponentOne.Studio、Infragistics.NetAdvantage等等,使用這些控件大多需要再花一定時間去掌握這些控件的用法,而且有些做得不是很好,我曾經見過一個商業控件裡面很多是畫出來的,不能像VS.net自帶的控件那樣在IDE上靈活控制,現在給大家展示一個很簡單的換皮膚控件,先不說别的,讓大家看看效果:

        看到上面的界面心動了嗎?告訴大家,我用的都是VS2005的标準控件,實作換皮膚的功能也僅僅是數行代碼而已,也就是說以前熟悉的控件還照常使用。

        先介紹一下這套控件吧,這套控件僅有一個dll(IrisSkin2.dll)檔案和一個skin檔案夾,skin檔案夾下共有22個子檔案夾,每個子檔案夾其實就是一套界面風格,也就是說我們可以使用22種不同風格。

        實作給界面換皮膚有兩種做法:(一)拷貝法,即使将界面資源夾下所有的檔案拷貝到.exe檔案所在的位置,然後在程式種通過skinEngine1.SkinFile=fileName(fileName是皮膚檔案.ssk檔案的位置)來設定界面皮膚,這種做法通常是我們需要在Debug檔案夾和Release檔案各儲存一套皮膚檔案,釋出程式的時候也需要附帶這些檔案。(二)嵌入資源法,本文就是采用這種辦法實作的,這樣做的好處是釋出程式時(不管是Debug版本或Release版本)時vs自動将皮膚檔案編譯進exe檔案中,減少程式釋出時檔案的個數,而且也不用管程式與皮膚檔案的相對位置。

        首先打開VS工具箱,添加皮膚控件元件,如下圖:

        然後在出現的“選擇工具箱項”中點選“浏覽”按鈕,然後找到IrisSkin2.dll檔案,然後“确定”,關閉對話視窗之後,皮膚控件元件就會出現在你的工具箱上了(具體出現在哪個分組跟你添加時添加哪個組有關),如下圖:

(我不小心加到列印分組去了,大家不要罵我:P)

        好了,現在可以編寫程式測試了,做一個簡單的窗體吧,界面上的控件如上圖所示,然後将皮膚元件拖拽到界面上,之後需要把程式所需要的皮膚資源檔案添加進來,這裡我是采用添加資源的辦法。

        步驟如下:

(一)在WinForm工程上右鍵單擊“屬性”,在出現的界面中點“資源”頁籤,把所需的皮膚資源檔案添加進來(通過“添加現有檔案”指令添加皮膚檔案),如下圖:

        注意如果該皮膚檔案夾下除了*.ssk檔案之外,還包含有其它圖檔檔案,建議将它們也作為資源添加到項目中。添加完成之後,我們就可以在代碼中通過Properties.Resources.檔案名來擷取這些檔案的内容了,通過這個方法傳回的是檔案内容的二進制資料(byte[]),而skinEngine1.SkinStream需要的是一個Stream對象,通過msdn我們可以以這個二進制資料建構一個Stream對象(new MemoryStream(byte[] bytes)),然後指派給皮膚元件的SkinStream屬性,如果需要換皮膚,重新建構一個皮膚資源檔案的Stream對象,然後重新指派就行了。

         界面控件布局代碼很簡單,就不粘貼了,主要把背景代碼放在這裡吧(其實也很簡單,不過需要注意,因為使用了MemoryStream對象,就需要在程式引用程式集部分添加對IO方面的引用:using System.IO;)

代碼如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.IO;

using System.Windows.Forms;

namespace SkinForm

{

        /// <summary>

        /// 說明:這是一個簡單的WinForm應用程式,用來展示如何使用換皮膚控件來實作我們需要的漂亮界面,代碼很簡單。

        /// 作者:周公

        /// 時間:2008-1-8

        /// 首發位址:http://blog.csdn.net/zhoufoxcn

        /// </summary>

        public partial class MainForm : Form

        {

                private MemoryStream memoryStream;

                public MainForm()

                {

                        InitializeComponent();

                        SetSkinFile(Properties.Resources.MacOS);

                }

                private void btnOK_Click(object sender, EventArgs e)

                        if (rbMacOS.Checked)

                        {

                                SetSkinFile(Properties.Resources.MacOS);

                        }

                        else if (rbMP10.Checked)

                                SetSkinFile(Properties.Resources.MP101);

                        else if (rbMSN.Checked)

                                SetSkinFile(Properties.Resources.MSN1);

                        else if (rbPage.Checked)

                                SetSkinFile(Properties.Resources.Page);

                        else if (rbRealOne.Checked)

                                SetSkinFile(Properties.Resources.RealOne1);

                        else if (rbVista1.Checked)

                                SetSkinFile(Properties.Resources.vista1_green1);

                        else if (rbVista2.Checked)

                                SetSkinFile(Properties.Resources.Vista2_color11);

                        else

                                SetSkinFile(Properties.Resources.XPBlue1);

                private void SetSkinFile(byte[] bytes)

                        memoryStream=new MemoryStream(bytes);

                        //設定皮膚可以通過兩種方式,一種是指定皮膚檔案的位置,

                        //如skinEngine1.SkinFile=fileName(fileName是皮膚檔案.ssk檔案的位置)

                        //一種是指定皮膚檔案的檔案流,如本程式所示

                        skinEngine1.SkinStream = memoryStream;

        }

}

程式界面效果如上面所示。

本文提到的皮膚元件可以到:http://download.csdn.net/user/zhoufoxcn/下載下傳。

        20081月10日答廣大朋友的疑問:

(一)有的朋友懷疑在MDI視窗中是否可以很好運用,我覺得是可以的,可以在MDI子視窗中設定它的皮膚檔案和父視窗一緻,這樣就做到了整個系統中所有界面皮膚風格一緻了。

(二)原來我自己曾懷疑在系統對話框中不能很好運作,剛剛證明了一下,是可以的,無需再做任何特殊設定。運作情況如下:

這是在預設皮膚為MacOS的情況下彈出的顔色對話框,也是MacOS風格的,如下:

繼續閱讀