使用DotNetBar製做漂亮的WinFrom界面,自定義AgileEAS.NET SOA平臺WinClient主界面

1、前言

     AgileEAS.NET SOA 中間件平臺是一款基於基於敏捷並行開發思想和Microsoft .Net構件(組件)開發技術而構建的一個快速開發應用平臺。用於幫助中小型軟件企業創建一條適合市場快速變化的開發團隊,以達到節省開發成本、縮短開發時間,快速適應市場變化的目的。git

     AgileEAS.NET SOA中間件平臺提供了敏捷快速開發軟件工程的最佳實踐,經過提供大量的基礎支撐功能如IOC、ORM、SOA、分佈式體系及敏捷併發開發方法所支撐的插件開發體系,以及提供了大量的實體、數據模型設計生成工具、代碼生成工具,用於幫助中小軟件開發商快速成長。程序員

     AgileEAS.NET平臺充分把握目前軟件行業快速發展的新趨勢,基於敏捷並行開發、快速適應市場這樣淳樸的軟件工程實踐,採用業界普遍使用的Microsoft .Net構件(組件)開發技術實踐了這種開發思想,幫助軟件企業實現「敏捷變化、快速適合」的目標,從而幫助軟件企業在激烈的市場競爭中贏得先機並得到更高的回報。github

2、關於WinClient的外掛資源體系介紹

     最第一版本的AgileEAS.NET SOA中間件平臺的運行容器/外殼是沒有界面替換體系,最初只是提供了替換關鍵部分的圖片、文字的功能,隨着AgileEAS.NET SOA中間件被衆多的客戶應用到各行各業以後,咱們從客戶的應用反饋之中進行了大量的重構,其中運行容器也愈來愈開放,從最初令開放替換部分圖片到慢慢開放能夠自由修改其餘的導航欄、Banner、狀態欄、菜單、登陸界面、關於界面,發生了很大的變化,同步咱們也提供了Desktop、MDI、Dockable等多種界面風格,能夠說客戶有更個人選擇了。併發

     隨着更多軟件企業或組織加入應用AgileEAS.NET SOA中間件行業,有許多的客戶已經不能知足於在這幾種風格之中進行選擇,但願能給本身最大的自定義空間和範圍,提供了更換主界面的需求,咱們積極的響應這種需求,而且提出了相關的解決方案,而且在2012年AgileEAS.NET SOA 5.0版本的時間向你們提供。app

     主界面替換被某一些咱們服務於的客戶所使用,可是對於廣大的關心AgileEAS.NET SOA中間件的朋友來講,並不能獲得咱們細緻而且一對一的服務,由於咱們尚未變此部份內容給你們作過介紹和在公開的案例之中提供,因此對於社區之中的不少朋友來講,還能靈活的應用本部份內容。分佈式

     下圖是一個典型的AgileEAS.NET SOA中間件平臺WinClient容器的主界面:工具

untitled

     其中包含如下組成部分:網站

 

     主菜單:界面最上部的主菜單,系統、視圖和幫助。spa

     導航菜單:經過菜單之中的菜單項能夠打開指點的功能模塊。.net

     導航欄:同系統導航菜單、以樹形或者其餘形式展現。

     狀態欄:顯示系統的一些狀態信息,如操做消息、當前登陸信息等。
     內容區:除以上項目外的界面空白區域爲業務工做區,即模塊插件的工做區域,新打開的模塊在經區域顯示和工做。

     啓始頁:特指工做區之中第一個打開的模塊,當系統登陸完成以後會自動打開一個模塊,此模塊稱爲起始頁模塊。

3、IResource接口

     AgileEAS.NET SOA 中間件平臺爲了應用對運行容器的各個部分進行自定義和擴展,提供了一個資源接口IResource:

   1: using System;
   2:  
   3: namespace EAS.Explorer
   4: {
   5:     /// <summary>
   6:     /// 運行容器的外殼資源。
   7:     /// </summary>
   8:     public interface IResource
   9:     {
  10:         /// <summary>
  11:         /// 獲取應用系統的圖標,用於替換主界面的圖標。
  12:         /// </summary>
  13:         System.Drawing.Icon GetMainIcon();
  14:  
  15:         /// <summary>
  16:         /// 獲取默認的模塊圖標,用於簡約、經典風格的Tab頁圖標顯示,也用於Desktop模式的桌面圖標顯示。
  17:         /// </summary>
  18:         System.Drawing.Image GetModuleIcon();
  19:  
  20:         /// <summary>
  21:         /// 獲取桌面背景圖像,用於Desktop模式的桌面模塊。
  22:         /// </summary>
  23:         System.Drawing.Image GetDesktopImage();
  24:  
  25:         /// <summary>
  26:         /// 獲取應用系統的導航控件,用於替換平臺的導航控件。
  27:         /// </summary>
  28:         /// <returns>WinForm/WPF用戶控件。</returns>
  29:         object GetNavigationControl(); 
  30:  
  31:         /// <summary>
  32:         /// 獲取應用系統的Banner控件,用於替換平臺的Banner條。
  33:         /// </summary>
  34:         /// <returns>WinForm/WPF用戶控件。</returns>
  35:         object GetBannerControl(); 
  36:  
  37:         /// <summary>
  38:         /// 獲取應用系統的Bottom控件,用於替換平臺的狀態欄。
  39:         /// </summary>
  40:         /// <returns>WinForm/WPF用戶控件。</returns>
  41:         object GetBottomControl(); 
  42:  
  43:          /// <summary>
  44:         /// 獲取WinForm/WPF容器的關於對話框,用於替換平臺的關於對話框。
  45:         /// </summary>
  46:         /// <returns>WinForm/WPF窗體。</returns>
  47:         object GetAboutForm();
  48:  
  49:         /// <summary>
  50:         /// 獲取WinForm/WPF容器的主界面,用於替換平臺的主界面。
  51:         /// </summary>
  52:         /// <returns>WinForm/WPF窗體。</returns>
  53:         object GetMainShell();        
  54:  
  55:         /// <summary>
  56:         /// 獲取WinForm/WPF/Silverlight容器的登陸對話框,用於替換平臺的登陸對話框。
  57:         /// </summary>
  58:         /// <returns>WinForm/WPF/Silverlight窗體。</returns>
  59:         ILoginForm GetLoginForm();
  60:  
  61:         /// <summary>
  62:         /// 獲取WinForm/WPF容器的起始頁/初始模塊,用於替換平臺的起始頁。
  63:         /// </summary>
  64:         /// <returns>WinForm/WPF用戶控件。</returns>
  65:         object GetStartModule();
  66:  
  67:         /// <summary>
  68:         /// 獲取系統的名稱,顯示在運行環境的導航欄。
  69:         /// </summary>
  70:         /// <returns>應用系統名稱。</returns>
  71:         string GetApplicationName();
  72:  
  73:         /// <summary>
  74:         /// 獲取系統的標題,顯示在運行環境的主窗口之上。
  75:         /// </summary>
  76:         /// <returns>應用系統名稱。</returns>
  77:         string GetApplicationTitle();
  78:  
  79:         /// <summary>
  80:         /// 是否顯示主菜單。
  81:         /// </summary>
  82:         bool DisplayMainMenu
  83:         {
  84:             get;
  85:         }
  86:  
  87:         /// <summary>
  88:         /// 是否顯示導航工具條。
  89:         /// </summary>
  90:         bool DisplayNavigationTool
  91:         {
  92:             get;
  93:         }
  94:     }
  95: }

     實現AgileEAS.NET SOA 平臺的資源替換便是實現IResource接口的過程,在咱們DrugShop、SmartERP案例之中都有對應的實現項目DrugShop.Res和SmartERP.Res。

     固然,光實現IResource還不購,還須要修改系統的配置文件,以便讓資源生效:

   1: <;!--資源-->
   2: <object name="EAS.Explorer.Resource" assembly="DrugShop.Res" type="DrugShop.Res.Resources" LifestyleType="Singleton"/>

     須要注意的是在EAS.Explorer.dll程序集之中還定義瞭如下兩個接口,INavigation接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Text.RegularExpressions;
   6: 
   7: namespace EAS.Explorer
   8: {
   9:     /// <;summary>
  10:     /// 導航控件接口。
  11:     /// <;/summary>
  12:     public interface INavigation
  13:     {
  14:         /// <;summary>
  15:         /// 初始化導航。
  16:         /// <;/summary>
  17:         /// <;param name="m_GroupList">導航清單。</param>
  18:         /// <;param name="m_ModuleList">模塊清單。</param>
  19:         void Initialize(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList);
  20:     }
  21: }

     ILoginForm接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace EAS.Explorer
   7: {
   8:     /// <;summary>
   9:     ///  定義登記對話框接口,用於實現自定義登陸。
  10:     /// <;/summary>
  11:     public interface ILoginForm
  12:     {
  13:         /// <;summary>
  14:         /// 是否已經經過登陸驗證。
  15:         /// <;/summary>
  16:         bool Passed { get; }
  17:     }
  18: }

     自定義的導航控件必須實現INavigation接口,以便於平臺實現導航的初始化,方法Initialize由平臺調用,傳入當前系統登陸人員所具備權限的模塊清單及相關的導航清單。

     自定個人登陸界面必須實現ILoginForm,以便於系統斷定登陸界面是否完成了登陸驗證。

4、IMainShell接口和自定義主界面

     第三節在介紹IResource接口的時候咱們會發現其餘有一個GetMainShell()方法,其用於獲取資源實現之中的主界面定義,系統主界面必須是一個Form而且要實現IMainShell接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace EAS.Explorer
   7: {
   8:     /// <;summary>
   9:     /// 定義主界面接口,用於實現自定義主界面。
  10:     /// <;/summary>
  11:     public interface IMainShell
  12:     {
  13:         /// <;summary>
  14:         /// 初始化主界面,根據平臺傳入的模塊清單和相關的導航分組初始化主界面。
  15:         /// <;/summary>
  16:         /// <;param name="m_GroupList">導航清單。</param>
  17:         /// <;param name="m_ModuleList">模塊清單。</param>
  18:         void InitializeShell(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList);
  19:  
  20:         /// <;summary>
  21:         /// 加載/打開指定模塊,響應系統的模塊打開操做。
  22:         /// <;/summary>
  23:         /// <;param name="module">模塊實例。</param>
  24:         void OpenModule(object module);
  25: 
  26:         /// <summary>
  27:         /// 關閉當前模塊(活動的模塊)。
  28:         /// <;/summary>
  29:         void CloseModule();
  30: 
  31:         /// <summary>
  32:         /// 關閉指定模塊。
  33:         /// <;/summary>
  34:         /// <;param name="module">模塊實例。</param>
  35:         void CloseModule(object module);
  36: 
  37:         /// <summary>
  38:         /// 切換導航,展開、隱藏導航,主界面沒有導航的隱藏、展開需求能夠不處理。
  39:         /// <;/summary>
  40:         void SwitchNavigation();
  41: 
  42:         /// <summary>
  43:         /// 當前活動插件/模塊。
  44:         /// <;/summary>
  45:         object ActiveAddIn
  46:         {
  47:             get;
  48:         }
  49:  
  50:         /// <;summary>
  51:         /// 已打開的插件/模塊集合。
  52:         /// <;/summary>
  53:         List<;object> AddIns
  54:         {
  55:             get;
  56:         }
  57:     }
  58: }

     其中InitializeShell方法:用於平臺傳入當前系統登陸人員所具備權限的模塊清單及相關的導航清單,由自定義界面實現界面的初始化。

     OpenModule方法:用於實現對模塊的打開,平臺傳入要打開的模塊,由主界面進行處理,實現主界面對模塊的動態加載。

     CloseModule方法:用於關閉已經打開的模塊,並對界面進行清理。

     SwitchNavigation方法:切換導航,展開、隱藏導航,主界面沒有導航的隱藏、展開需求能夠不處理。

     ActiveAddIn屬性:向平臺返回當前的活動模塊。

     AddIns屬性:向平臺返回已加載的模塊清單。

4、自定義界面實例

     近期 有朋友建議使用devcomponents或者DotNetBar爲你們演示一下如何自定義平臺的主體界面,參考了網有對devcomponents和DotNetBar相關的資料以後咱們選擇了較爲輕量級的DotNetBar爲你們演示如何替換系統的主界面。

     咱們使用DotNetBar所提供的一些控件實現瞭如下三種風格的主體界面:

     第一種是Win7/Ribbon風格的主界面RibbonShell,以下圖所示:

image

     其對應代碼爲DrugShop案例之中的DrugShop.Res項目之中的RibbonShell.cs程序文件。

     第二種爲相似Visual Studio界面風格的DockableShell,其效果以下:

image

     其對應代碼爲DrugShop案例之中的DrugShop.Res項目之中的DockableShell.cs程序文件。

     第三種爲不包含導航欄的簡單MDI界面風格的TabShell,其效果以下:

image

     其對應代碼爲DrugShop案例之中的DrugShop.Res項目之中的TabShell.cs程序文件。

5、關於代碼

     以上介紹了三種風格的自定義主界面的例子,例子很少,也不復雜,或許也不能知足全部人的美觀度需求和功能需求,其目的在於拋磚引用,但願藉此文讓更多的開發者加入到咱們的行列之中來,作出更加美觀大方的界面。

     關於以上三種風格自定義界面代碼,咱們已經合併到DrugShop案例SmartEPR案例之中,請你們在AgileEAS.NET SOA中間件官方網站最新下載欄目進行下載。

     在啓動自定義界面的過程之中切記要修改資源項目之中IResource的實現代碼之中的GetMainShell方法代碼:

   1: public object GetMainShell()
   2: {
   3:     return new RibbonShell(); //Ribbon風格自定義界面。
   4:     //return new DockableShell(); //Dockable風格自定義界面。
   5:     //return new TabShell(); //TabMdi風格自定義界面。
   6:     //return null; //使用AgileEAS.NET SOA平臺自帶界面。
   7: }

    本文所使用的是DotNetBar115版本,有關於DotNetBar115請經過http://42.121.30.77/downloads/DotNetBar115.rar下載。

6、聯繫咱們

     爲完善、改進和推廣AgileEAS.NET而成立了敏捷軟件工程實驗室,是一家研究、推廣和發展新技術,並致力於提供具備自主知識產權的業務基礎平臺軟件,以及基於業務基礎平臺開發的管理軟件的專業軟件提供商。主要業務是爲客戶提供軟件企業研發管理解決方案、企業管理軟件開發,以及相關的技術支持,管理及技術諮詢與培訓業務。

     AgileEAS.NET SOA中間件平臺自2004年秋呱呱落地一來,我就一直在逐步完善和改進,也被應用於保險、醫療、電子商務、房地產、鐵路、教育等多個應用,但一直都是以我我的在推廣,2010年由於我辭職休息,我就想到把AgileEAS.NET推向市場,讓更多的人使用。

     個人技術團隊成員都是合做多年的老朋友,由於這個平臺是免費的,因此也沒有什麼收入,都是由程序員的那種理想與信念堅持,在此我感謝一塊兒奮鬥的朋友。

團隊網站:http://www.agilelab.cn

AgileEAS.NET網站:http://www.agileeas.net

官方博客:http://eastjade.cnblogs.com

github:https://github.com/agilelab/eas

QQ:47920381

QQ羣:113723486(AgileEAS SOA 平臺)/上限1000人

199463175(AgileEAS SOA 交流)/上限1000人

212867943(AgileEAS.NET研究)/上限500人

147168308(AgileEAS.NET應用)/上限500人

172060626(深度AgileEAS.NET平臺)/上限500人

116773358(AgileEAS.NET 平臺)/上限500人

125643764(AgileEAS.NET探討)/上限500人

193486983(AgileEAS.NET 平臺)/上限500人

郵件:james@agilelab.cn,mail.james@qq.com,

電話:18629261335。

相關文章
相關標籤/搜索