使用增強Windows表單為你的.Net程式打造豐富的使用者介面

來源:互聯網
上載者:User
原文出處:.NET Framework 2.0: Craft a Rich UI for Your .NET App with Enhanced Windows Forms Support

  本文內容基於微軟 Visual Studio 2005 發布前的預覽版,之前代號為“Whidbey”。其中所有資訊在正式版中都可能會有所改變。

本文所討論內容:

  • 關於Windows表單控制項的新內容
  • 運用‘主題’
  • 綁定和顯示資料
  • 其他資料細節特徵
  • 本文使用以下技術:C# 與 Windows 表單

      微軟的 .NET 架構 1.0 版確實很好地滿足了我們的要求。.NET在以下兩方面有重要的意義,它不僅根本性地改變了開發人員構建與發布 Windows 應用程式的方法,而且還建立了一個巨大的具有很好伸縮特性的技術平台,Visual Studio2005 就是一個很好的例子,它在使用者的可定製性和改進的功能性方面都表現的很好。這些變化影響的範圍主要集中在 Microsoft .NET架構中的 Windows 表單子集,從核心的 System.Windows.Forms 命名空間擴充到多種多樣的支援性技術,既有舊的也有新的,包括ADO.NET,ObjectSpaces 以及 ClickOnce 部署。

      在 Visual Studio 2005 的各個方面都能發現生產效率的提高,包括增強整合式開發環境,改進的控制項和資料設計器,還有代碼產生器。由於不必手工編寫各種各樣預定格式的代碼,代碼編寫狂們可能會感到沮喪,而我們就可以有更多的時間來享受我們的生活了。

    System.Windows.Forms



      一些重要的工作已經在 System.Windows.Forms 中做好了,激動人心的新技術中便包含了 Windows 表單。就在我寫本文的同時,可用的命名空間數量和公用類型與成員的組成分別增加了67% 和 127%,這無疑標誌著 Visual Studio 2005 是一個卓越的產品。當然本文中我們沒有足夠的篇幅來講述每一件事, Figure 1 向我們展示了主要改進方面的概覽,這些新增與加強的改進覆蓋面較廣,例如更好的主題支援,改進的資料繫結,以及 GridView 控制項。

     

    類別 描述
    布局控制項 SplitContainer, FlowLayout, and TableLayout container

    用於在設計時和運行時管理控制項的控制項.
    資料繫結控制項 GridView 控制項用來豐富表格樣式資料的表現形式, 查詢方式, 與處理方式。 DataContainer用來簡化資料繫結和資料繫結使用者介面的設計,支援VCR樣式的使用者介面設計和master-detail 使用者介面設計。
    使用者介面構造組件 MainMenu組件現在支援給功能表項目添加圖片。WinBar控制項提供了與Microsoft Office一樣的工具條。WebBrowser控制項是一個封裝了shdocvw.dll的託管瀏覽器。
    控制項與組件 ControlArray使提供單一的介面得到恢複
    管理 用來管理許多控制項,它們可以使不同的類型。ComponentArray 是代替ControlArray的不錯方法,它面向組件。
    非同步呼叫支援 後台工作的組件覆蓋了背景工作執行緒的建立與管理(技術上不從System.Windows.Forms中實現,但確實Windows表單可以實現).音效檔在聲音組件中載入。影像檔在圖片框控制項中載入。
    基本改進 對文字框和複合列表框控制項自動完成功能的支援,可自動完成包括IE瀏覽曆史紀錄和開始|運行命令等許多系統資源。複合列表框與列表框控制項新增了對最進使用過的清單項目進行格式化的支援。

    Figure 1 新的 Windows 表單特性

    Windows 主題支援

      當像以往一樣建立一個新的Windows表單工程後,你會發現一個新的變化:預設的Windows主題支援。一個Windows主題就是一組個人化的使用者設定,它展示了Windows使用者介面的外觀。你可以通過在案頭上單擊滑鼠右鍵並在彈出的“顯示內容對話方塊”中選擇“屬性”|“主題”屬性頁面來指定桌面主題。

      因為Windows主題是由使用者指定的,所以Windows表單承擔了表現它的責任。雖然現有版本的.NET架構支援Windows主題,但是1.0版本需要開發人員在檔案系統的指定位置添加一個擁有特殊名字的檔案來實現。而1.1版通過提供Application.EnableVisualStyles方法並將每個控制項的FlatStyle屬性值設為"System"來支援Windows主題,從而簡化了1.0版的實現過程。 Visual Studio 2005 將會進一步改進此過程,在建立新的Windows表單工程時預設調用EnableVisualStyles 方法使表單預設支援Windows主題:

    public class Form1 : System.Windows.Forms.Form {  ...  [STAThread]  static void Main() {    Application.EnableVisualStyles();    Application.Run(new Form1());  }  ... }

      在以前,將控制項的FlatStyle屬性值設為"System"就意味著作業系統決定了控制項顯示時的外觀。現在,當FlatStyle屬性設定為預設值"Standard"時, Visual Studio 2005的大部分控制項都會依據當前正在使用的Windows主題來呈現自己。這與先通過系統設定然後儲存你在設計器中的設定結果基本上是一樣的。無論FlatStyle 屬性為"Standard"還是"System",表單在運行時會依據主題的改變動態地作出反應,卻不需要編寫一行代碼,這種關於主題的靈敏性對開發人員是有利的。

    控制布局與配置

      支援 Windows 主題只需要建立一個工程或表單,並放入需要的控制項。然而,對表單上的控制項進行布局,並對其進行配置是件耗時的工作,尤其是那些複雜的表單。為了簡便,Windows表單設計器加入了一些新特性,目的就是減少這些瑣碎事情所消耗的設計時間。這些特性包括吸附對齊、編輯屬性模式以及智能標記,這些特性使操作控制項更加容易。你仍舊可以使用Visual Studio的布局工具條來水平或垂直對齊控制項,你只需對表單上的那些控制項操縱一次。除此之外,你可以使用吸附對齊來達到與拖拽控制項一樣的效果,同時避免了在使用布局工具條時選擇控制項和工具條按鈕所帶來的設計時間的浪費。吸附式對齊表現為一條或多條有粘性的藍色線條,控制項在這些線條的導引下與鄰近的控制項對齊。


    Figure 2 編輯屬性

      另一個新特性, 編輯屬性模式, 允許你用Tab鍵遍曆控制項並在頁面上直接改變它們的屬性。首先在Windows表單設計器的操作功能表中點擊選擇與其同名的功能表項目使編輯屬性模式被啟用。下一步就是遍曆控制項並按照你的要求修改屬性。過程如Figure 2所示。編輯完成後,點擊“返回配置模式”回到正常的編輯模式。設定屬性是一個改變控制項的簡便方法。用另外一個更合適的控制項來完全替換當前控制項可不容易,你需要刪除這個控制項,然後將一個新控制項拖入表單並重新設定它。應付像這樣複雜的多步設計任務,智能標記正好派上用場,它將設計時的多步任務合并為一步,並在相關控制項附近顯示功能表項目表徵圖作為其標記,智能標記也可以處理簡單的設計時任務,這經常會發生,例如在將一個文字框拖放入一個表單時改變它的"Text"屬性。

    控制項與資料繫結

      整合式開發環境的另一項改進是Visual Studio 2005中的Windows表單提供了新的控制項,並改進了廣受歡迎的舊控制項例如文字框和複合列表框。Figure 3顯示了一個用新增控制項和使用中的改進控制項建立的小型瀏覽器,建立他們所需要的代碼比在Windows表單的上個版本中要少。


    Figure 3 使用新控制項的Web瀏覽器

      這個簡單的例子展示了怎樣用Visual Studio 2005中增強工具箱建立豐富的程式,同時減少了代碼的編寫。例如,設計這個功能齊全的小型瀏覽器僅僅花了大約10分鐘,並且只編寫了85行代碼來實現傳統的全部網頁瀏覽事件,它還實現了URL訪問記錄功能。網頁導航和HTML呈現的實際工作是由右側塊形容器中的WebBrowser控制項完成的。分割條和左右塊形容器都是由一個SplitContainer控制項提供的。

      Figure 3 中顯示的複合列表框展示了新型的自動完成支援功能。自動完成功能通過3個屬性來實現,首先是AutoCompleteMode,它可以讓你選擇樣式枚舉值來設定自動完成樣式:

    enum AutoCompleteMode {  None = 0x0,        // No autocompletion  AutoSuggest = 0x1, // Possible matches chosen from drop-down list  AutoAppend = 0x2,  // Possible matches                      // appended to text                      // while typing   AutoSuggestAppend = 0x3 // AutoSuggest and                           // AutoAppend combined}

      除了選擇"None",其他選項都需要你設定AutoCompleteSource屬性,其值為系統預先設定好的AutoCompleteSource枚舉值 :

    enum AutoCompleteSource {  FileSystem = 0x1,       // File system  HistoryList = 0x2,      // All URLs from History list  RecentlyUsedList = 0x4, // All URLs from Recently Used list  AllURL = 0x6,           // HistoryList + RecentlyUsedList  AllSystemSources = 0x7, // FileSystem + AllURL  CustomSource = 0x40,    // AutoCompleteCustomSource  None = 0x80             // No source}

      

    設定自訂來源的複合列表框需要我們提供自動完成選項,這些選項可以來自儲存在AutoCompleteCustomSource屬性中的元素的集合。目前,複合列表框和文字框是僅有的提供自動完成功能的控制項。

    GridView

      工具箱中的大多數控制項都支援資料繫結,通過底層的資料繫結構件來綁定各種各樣的資料來源。在目前許多情形下,尤其是原型和快速開發中,資料繫結都是關鍵。Windows表單開發小組用改進的類型化資料集明顯地加強了資料繫結命名空間,包括GridView和DataContainer,並為快速開發加強了設計時支援。這些特性讓你開發分地區樣式的使用者介面或表格樣式的使用者介面時感到一樣的輕鬆。

      有時表格樣式的使用者介面更適合展現繫結資料,並且另一方面,微軟在其前一個版本的.NET架構中包含了DataGrid控制項。對於Visual Studio 2005來說,Windows表單開發小組響應了社區中關於DataGrid的反饋並決定構造一個新的表格控制項,System.Windows.Forms.GridView (參見 Figure 4)。


    Figure 4 GridView 列

      也許DataGrid與GridView(表格視圖)最明顯的區別就是GridView的物件模型,它已經被抽象為一個基於列、行的自然表格結構,允許開發人員通過大量直觀的定位函數來操縱每一個儲存格,包括以下幾點:

    • 通過樣式、格式、布局和選擇項支援豐富的自訂使用者介面
    • 與DataGrid相比具有顯示更多種類資料的能力,新增了一組更加豐富類型,包括映像。諸如凍結列(與Excel中的相似)這樣的精彩特性和運行時列的重新排序(與Outlook中的相似)。
    • 構成它的子控制項在導航、編輯、驗證、自繪和錯誤處理等方面擁有有超過100個事件

      結合過去廣泛的設計經驗,這些新特性使我們可以快速自訂控制項而不用寫很多代碼,其實是將對DataGrid的特定編碼塞進了GridView的方法、屬性和事件中。其中的一個例子就是在DataGrid中通過單擊儲存格來選擇一行, 而現在以GridView的SelectionMode 屬性的方式暴露出來。當然沒有一個控制項是十全十美的,當它們表現出不足時,開發人員應該依靠其擴充特性來組合出具有自訂特性的控制項。GridView控制項的底層實現都是基於多種儲存格、行和列的,你可以繼承並進行擴充。總的來說,GridView作為表格樣式的控制項比DataGrid更加引人注目。

    類型化的資料集

      GridView 控制項是可以綁定數組、集合和類型化資料集的控制項家族中的一員。類型化資料集的優點是:.NET架構允許控制項在設計器中進行綁定以協助開發人員看到設計好的使用者介面。GridView通過在設計時自動產生資料來源中每一個欄位的資料來實現這項功能。Visual Studio 2005增強了類型化資料集從而使我們的生活更輕鬆。你將減少花在設計表單上的時間,類型化資料集現在可以將資料來源中的中繼資料完整的呈現出來,包括外鍵約束和遞增種子以及步驟控制。如Figure 5所示。


    Figure 5 預設的類型化資料集

      設計器同時也產生一個填充查詢,它封裝了查詢相關表的Select語句並且在類型化資料集中以同名方法實現。有時,系統初始指定的Select、Insert、Update和Delete語句不好用。例如,填充方法將返回所有的僱員資訊,而很多時候你只是需要返回一名員工的資訊。在這種情況下,使用自己指定的查詢語句並填充才是明智之舉。類型化DataSet 設計工具允許你添加自己的查詢語句,通過在適當表格的操作功能表中選擇“添加”|“查詢”來實現。

      “資料表查詢嚮導”對話方塊可以協助你構造你自己的查詢語句,之後資料表會被新資料更新。當你完成類型化資料集的配置後,你會將他綁定到使用者介面中的一個或多個控制項中。在Visual Studio 2005中, 類型化資料集可以被直接綁定到那些實現了資料來源和資料成員屬性的控制項中,而不必添加資料集對象到表單中。

    DefaultInstance

      任何曾經大量使用類型化資料集的人都知道,一般來說每一個新的類型化資料集類僅在應用程式的一個地方被使用。因為Windows表單開發小組瞭解我們並希望使我們更輕鬆,他們已經在每個通用的類型化資料集類中設定了一個靜態屬性DefaultInstance,通過調用它來擷取這個單一執行個體。如下實現:

    public static EmployeeTDS DefaultInstance {     get {       if (_defaultInstance == null) {         _defaultInstance = new Northwind();       }       return _defaultInstance;     }}

    你可以這樣使用DefaultInstance屬性:

    public class Form1 : System.Windows.Forms.Form {  ...  private void Form1_Load(    object sender, System.EventArgs e) {    // Load data    EmployeeTDS.DefaultInstance.LoadData();  }  ...}

      資料繫結控制項使用DefaultInstance的類型名設定它們的資料來源屬性,類型名預設為"工程命名空間 。類型資料集名"的形式,而隨後指定資料成員的步驟保持不變。

    DataContainer控制項

      GidView 控制項是複雜繫結控制項的一個例子,它意味著控制項知道怎樣管理資料繫結以支援查詢、插入、更新和刪除操作。相反,簡單資料繫結控制項不知道這些,需要你通過資料來源綁定管理器來實現與複雜繫結控制項相同的功能,特別是帶有那種VCR樣式控制項的使用者介面。當你偏愛列表樣式的資料而不是表格式的資料時,你可以使用簡單資料繫結控制項。這種方法需要你手動將一系列適當的控制項分地區地添加到表單中,例如標籤和文字框,結果就像Figure 6顯示的那樣。


    Figure 6 基本使用者介面

      當你可以手動實現如此細緻的表單時,在Visual Studio 2005 中你也可以通過DataContainer綁定一個類型化資料集一次性實現這個表單。僅需要簡單地從DataContainer的智能標籤中選擇名稱為這個表單的功能表項目。

      這一特性會依據選擇的資料來源為你自動產生所有的控制項地區。而且,DataContainer將會載入並儲存這些資料,還會預設地添加VCR樣式的導航與編輯控制項而不用編寫代碼。結果如Figure 7所示。


    Figure 7 帶有VCR控制項的分地區樣式的使用者介面

      如果你的介面需求改變了而且你發現表格樣式的使用者介面更合適,你可以用DataContainer來完成如此艱巨的任務,你只需要從DataContainer 中選擇適當的智能標記選項。設計器便刪除所有現存的控制項,代之以一個DataGrid(在未來版本的Visual Studio中也許會是一個GridView)。

    Master-detail綁定

      多功能的DataContainer也是構建master-detail使用者介面的強大工具,這種介面提供了一種基於表單的視覺效果,來展示關聯式資料庫中經常用到的一對多關聯性。例如顯示僱員--訂單關係,我們只需要簡單地將訂單表添加到類型化資料集中就可以正確配置。


    Figure 8 Master-detail表單

      既然我們已經產生了master使用者介面(如Figure 7所示),我們接下來所要做的就是將一個GridView拖拽到表單上,並將其資料來源屬性設為DataContainer,資料成員屬性設為訂單--訂單明細關係(這裡為訂單--僱員外鍵約束),結果如 Figure 8。

    ClickOnce 部署

      當你在表單中設定好了所有的控制項,並編寫了使它們共同工作的代碼,你將要部署此應用程式。為大量的使用者們部署一個企業級的Windows表單應用程式將會面臨一個關於安裝與版本變更的嚴峻挑戰,所以上一輩的開發人員更願意捨棄豐富的Windows使用者介面而轉向Web應用程式並享受其所帶來的部署的便利性。

      在.NET中,微軟開始建立一個底層結構,它使得發布Windows表單應用程式與發布ASP.NET應用程式一樣輕鬆。在Visual Studio 2005之前, .NET架構支援no-touch部署, 其允許Windows表單應用程式從一個URL或一個統一名稱轉換(UNC)檔案路徑進行部署,並在客戶機中的一個沙箱中運行,這個沙箱具有代碼訪問安全(CAS)性。在Visual Studio 2005中No-touch部署進化到了ClickOnce部署,並出現了一些新的特性給Windows表單程式開發人員提供了一個像部署Web應用程式一樣平滑的底層結構。 特別地,ClickOnce部署還提供了對一些經過改進的功能的支援,如程式發送、版本更新與復原、對用戶端應用程式安裝的更多控制、更新許可和包含在Visual Studio所有結構中的設計時配置支援。

    配置流水線型部署

      在設計時,通過在Visual Studio2005的工程配置屬性中設定發布屬性頁面的各項屬性,可以對ClickOnce部署進行配置。依據你的底層結構和使用者群,不同的部署資源(檔案伺服器、Web伺服器或者FTP伺服器)有其特定的意義。ClickOnce部署允許你指定哪些將要被發布和安裝以及安裝方式(例如,通過網頁進行安裝)。可以通過配置來決定應用程式是否被安裝到客戶機器的物理磁碟機上。如果用戶端安裝完成,你可以規定在程式裝載或運行之前是否進行更新檢查,或多長時間進行更新檢查,或是強迫要求更新--對進行關鍵性的更新操作來說是個有用的功能。它也可以指定安裝程式前的必備條件,.NET架構程式本身就是這樣。而且在安全屬性頁面中可以設定一些安全設定。

      當將要發布時,你可以通過點擊“工程”|“發布工程”菜單一步產生並發布你的應用程式,它既產生了應用程式也發布了應用程式。發布應用程式的過程由發布嚮導程式進行管理,它主要查看你的發布配置設定,並允許你在發布前更改這些配置。在發布過程中最後彈出的一個表單列出了所有需要確定的選項,並且提供了一個選項用來確定是發布程式還是返回修改設定。之後發布嚮導根據你的選擇按照要求發布應用程式。

    部署程式

      部署程式開始於使用者開啟部署Web頁面並點擊發布此程式所需的超連結。應用程式被連結到一個.Deploy檔案而不是一個可以自啟動並執行程式。.deploy檔案是ClickOnce部署程式所必須的兩個檔案之一,它指定了程式部署與更新需求。第二個檔案是.manifest檔案, 它指定了程式運行所需要的檔案。這相當於程式的裝配清單。.deploy與.manifest檔案都在用戶端被ClickOnce部署服務處理,System.DeploymentFramework.Service.exe. 這個服務隨.NET架構一同被安裝,並且第一此啟動時需要一個.deploy檔案。它會以對話方塊的形式要求確認下載,而使用者不會看到任何的後台操作。下載完成後,真正的應用程式會被載入到AppHost.exe程式,並由其運行。應用程式會儲存在本地的緩衝中,直到你指定沒有用戶端安裝操作。以後應用程式啟動總需要這個.deploy檔案,並且在本機快取中被執行直到.debug檔案指定在伺服器端有新的版本。

      如果應用程式運行在要求更高可配置安全性的領域(例如互連網或者區域網路),ClickOnce部署程式可以為使用者提供達到相應層級的程式訪問許可證,以確保程式的正確執行。如果沒有許可程式永遠不會啟動,根本就不會給其啟動並執行機會。

    ClickOnce 部署的版本控制與復原

      如果部署了一個程式,一個表徵圖便會添加在“開始”菜單上並且在控制台|添加刪除程式中新增了一項。從添加刪除程式中,你可以完全卸載應用程式或者返回到前一個版本,如果存在前一個版本的話。流水線部署程式的版本控制功能主要依賴於你使用AssemblyVersion屬性所指定的版本號碼,AssemblyVersion屬性在AssemblyInfo.cs檔案中被產生,AssemblyInfo.cs檔案是每一個Windows表單工程預設產生的。就像這樣:

          [assembly: AssemblyVersion("1.0.*")]

      版本號碼被用來決定是否有一個新的版本可以用於下載。它也用來命名部署檔案夾和程式所在的用戶端臨時檔案夾。兩個檔案夾的名稱轉換形式為程式名_主號_輔號_組建編號_修訂編號。

      ClickOnce 部署是一項十分強大的技術,它為我們帶來了很多好處,在本文中無法一一描述。然而,使用ClickOnce部署的主要動機是為了部署、安裝和控製版本的方便。想要瞭解關於它的更多資訊,請參考本期MSDN雜誌中由Brian Noyes撰寫的名為 "ClickOnce: Deploy and Update Your Smart Client Projects Using a Central Server" 的文章。

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.