posts - 495,comments - 227,trackbacks - 0

          利用.net技術(shù)能夠快速開(kāi)發(fā)出應(yīng)用程序,但是如果應(yīng)用微軟的那一套技術(shù),做出來(lái)的程序大多數(shù)程序員恐怕都會(huì)有一種千篇一律的感覺(jué):按鈕還是那個(gè)按鈕(只是文字不同),文本框還是那個(gè)文本框, 下拉列表還是那個(gè)下拉列表........跟系統(tǒng)里的沒(méi)有什么兩樣,不管程序怎么樣,至少這個(gè)界面沒(méi)什么新意。

          誠(chéng)然,目前也有不少第三方的控件,如Xceed Ultimate Suite、ComponentOne.Studio、Infragistics.NetAdvantage等等,使用這些控件大多需要再花一定時(shí)間去掌握這些控件的用法,而且有些做得不是很好,我曾經(jīng)見(jiàn)過(guò)一個(gè)商業(yè)控件里面很多是畫(huà)出來(lái)的,不能像VS.net自帶的控件那樣在IDE上靈活控制,現(xiàn)在給大家展示一個(gè)很簡(jiǎn)單的換皮膚控件,先不說(shuō)別的,讓大家看看效果:

          看到上面的界面心動(dòng)了嗎?告訴大家,我用的都是VS2005的標(biāo)準(zhǔn)控件,實(shí)現(xiàn)換皮膚的功能也僅僅是數(shù)行代碼而已,也就是說(shuō)以前熟悉的控件還照常使用。

          先介紹一下這套控件吧,這套控件僅有一個(gè)dll(IrisSkin2.dll)文件和一個(gè)skin文件夾,skin文件夾下共有22個(gè)子文件夾,每個(gè)子文件夾其實(shí)就是一套界面風(fēng)格,也就是說(shuō)我們可以使用22種不同風(fēng)格。

          實(shí)現(xiàn)給界面換皮膚有兩種做法:(一)拷貝法,即使將界面資源夾下所有的文件拷貝到.exe文件所在的位置,然后在程序種通過(guò)skinEngine1.SkinFile=fileName(fileName是皮膚文件.ssk文件的位置)來(lái)設(shè)定界面皮膚,這種做法通常是我們需要在Debug文件夾和Release文件各保存一套皮膚文件,發(fā)布程序的時(shí)候也需要附帶這些文件。(二)嵌入資源法,本文就是采用這種辦法實(shí)現(xiàn)的,這樣做的好處是發(fā)布程序時(shí)(不管是Debug版本或Release版本)時(shí)vs自動(dòng)將皮膚文件編譯進(jìn)exe文件中,減少程序發(fā)布時(shí)文件的個(gè)數(shù),而且也不用管程序與皮膚文件的相對(duì)位置。

          首先打開(kāi)VS工具箱,添加皮膚控件組件,如下圖:

          然后在出現(xiàn)的“選擇工具箱項(xiàng)”中點(diǎn)擊“瀏覽”按鈕,然后找到IrisSkin2.dll文件,然后“確定”,關(guān)閉對(duì)話窗口之后,皮膚控件組件就會(huì)出現(xiàn)在你的工具箱上了(具體出現(xiàn)在哪個(gè)分組跟你添加時(shí)添加哪個(gè)組有關(guān)),如下圖:

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

          好了,現(xiàn)在可以編寫(xiě)程序測(cè)試了,做一個(gè)簡(jiǎn)單的窗體吧,界面上的控件如上圖所示,然后將皮膚組件拖拽到界面上,之后需要把程序所需要的皮膚資源文件添加進(jìn)來(lái),這里我是采用添加資源的辦法。

          步驟如下:
          (一)在WinForm工程上右鍵單擊“屬性”,在出現(xiàn)的界面中點(diǎn)“資源”選項(xiàng)卡,把所需的皮膚資源文件添加進(jìn)來(lái)(通過(guò)“添加現(xiàn)有文件”命令添加皮膚文件),如下圖:

          注意如果該皮膚文件夾下除了*.ssk文件之外,還包含有其它圖片文件,建議將它們也作為資源添加到項(xiàng)目中。添加完成之后,我們就可以在代碼中通過(guò)Properties.Resources.文件名來(lái)獲取這些文件的內(nèi)容了,通過(guò)這個(gè)方法返回的是文件內(nèi)容的二進(jìn)制數(shù)據(jù)(byte[]),而skinEngine1.SkinStream需要的是一個(gè)Stream對(duì)象,通過(guò)msdn我們可以以這個(gè)二進(jìn)制數(shù)據(jù)構(gòu)建一個(gè)Stream對(duì)象(new MemoryStream(byte[] bytes)),然后賦值給皮膚組件的SkinStream屬性,如果需要換皮膚,重新構(gòu)建一個(gè)皮膚資源文件的Stream對(duì)象,然后重新賦值就行了。

          界面控件布局代碼很簡(jiǎn)單,就不粘貼了,主要把后臺(tái)代碼放在這里吧(其實(shí)也很簡(jiǎn)單,不過(guò)需要注意,因?yàn)槭褂昧薓emoryStream對(duì)象,就需要在程序引用程序集部分添加對(duì)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>
              
          /// 說(shuō)明:這是一個(gè)簡(jiǎn)單的WinForm應(yīng)用程序,用來(lái)展示如何使用換皮膚控件來(lái)實(shí)現(xiàn)我們需要的漂亮界面,代碼很簡(jiǎn)單。
              
          /// 作者:周公
              
          /// 時(shí)間:2008-1-8
              
          /// 首發(fā)地址: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);
                      
          //設(shè)置皮膚可以通過(guò)兩種方式,一種是指定皮膚文件的位置,
                      
          //如skinEngine1.SkinFile=fileName(fileName是皮膚文件.ssk文件的位置)
                      
          //一種是指定皮膚文件的文件流,如本程序所示
                      skinEngine1.SkinStream = memoryStream;
                      
                  }
              }
          }

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

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

          posted on 2008-01-09 13:08 SIMONE 閱讀(1084) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): .NET
          主站蜘蛛池模板: 金坛市| 壤塘县| 贵阳市| 昌平区| 五家渠市| 闽侯县| 仲巴县| 松溪县| 恩平市| 若尔盖县| 大宁县| 太仆寺旗| 西乡县| 囊谦县| 浪卡子县| 大关县| 邹平县| 商河县| 洪泽县| 泰兴市| 景宁| 开平市| 嘉定区| 天津市| 布拖县| 化德县| 南郑县| 黑龙江省| 麻江县| 唐山市| 东源县| 互助| 汝南县| 灵武市| 四平市| 柘荣县| 颍上县| 岳阳县| 潼南县| 大冶市| 扬中市|