使用增强的Windows窗体为你的.Net程序打造丰富的用户界面
|
.NET FRAMEWORK 2.0... 翻譯:宋文鋒 原文出處:.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 部署。 System.Windows.Forms
Figure 1 新的 Windows 窗體特性 Windows 主題支持 當像以往一樣創建一個新的Windows窗體工程后,你會發現一個新的變化:默認的Windows主題支持。一個Windows主題就是一組個性化的用戶設定,它展示了Windows用戶界面的外觀。你可以通過在桌面上單擊鼠標右鍵并在彈出的“顯示屬性對話框”中選擇“屬性”|“主題”屬性頁來指定桌面主題。 public class Form1 : System.Windows.Forms.Form {
...
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new Form1());
}
...
}
在以前,將控件的FlatStyle屬性值設為"System"就意味著操作系統決定了控件顯示時的外觀?,F在,當FlatStyle屬性設置為默認值"Standard"時, Visual Studio 2005的大部分控件都會依據當前正在使用的Windows主題來呈現自己。這與先通過系統設定然后保存你在設計器中的設定結果基本上是一樣的。無論FlatStyle 屬性為"Standard"還是"System",窗體在運行時會依據主題的改變動態地作出反應,卻不需要編寫一行代碼,這種關于主題的靈敏性對開發者是有利的。 控制布局與配置 支持 Windows 主題只需要創建一個工程或窗體,并放入需要的控件。然而,對窗體上的控件進行布局,并對其進行配置是件耗時的工作,尤其是那些復雜的窗體。為了簡便,Windows窗體設計器加入了一些新特性,目的就是減少這些瑣碎事情所消耗的設計時間。這些特性包括吸附對齊、編輯屬性模式以及智能標記,這些特性使操作控件更加容易。你仍舊可以使用Visual Studio的布局工具條來水平或垂直對齊控件,你只需對窗體上的那些控件操縱一次。除此之外,你可以使用吸附對齊來達到與拖拽控件一樣的效果,同時避免了在使用布局工具條時選擇控件和工具條按鈕所帶來的設計時間的浪費。吸附式對齊表現為一條或多條有粘性的藍色線條,控件在這些線條的導引下與鄰近的控件對齊。
另一個新特性, 編輯屬性模式, 允許你用Tab鍵遍歷控件并在頁面上直接改變它們的屬性。首先在Windows窗體設計器的上下文菜單中點擊選擇與其同名的菜單項使編輯屬性模式被激活。下一步就是遍歷控件并按照你的要求修改屬性。過程如Figure 2所示。編輯完成后,點擊“返回布局模式”回到正常的編輯模式。設置屬性是一個改變控件的簡便方法。用另外一個更合適的控件來完全替換當前控件可不容易,你需要刪除這個控件,然后將一個新控件拖入窗體并重新配置它。應付像這樣復雜的多步設計任務,智能標記正好派上用場,它將設計時的多步任務合并為一步,并在相關控件附近顯示菜單項圖標作為其標記,智能標記也可以處理簡單的設計時任務,這經常會發生,例如在將一個文本框拖放入一個窗體時改變它的"Text"屬性。 控件與數據綁定 集成開發環境的另一項改進是Visual Studio 2005中的Windows窗體提供了新的控件,并改進了廣受歡迎的舊控件例如文本框和復合列表框。Figure 3顯示了一個用新增控件和使用中的改進控件創建的小型瀏覽器,創建他們所需要的代碼比在Windows窗體的上個版本中要少。
這個簡單的例子展示了怎樣用Visual Studio 2005中增強的工具箱創建豐富的程序,同時減少了代碼的編寫。例如,設計這個功能齊全的小型瀏覽器僅僅花了大約10分鐘,并且只編寫了85行代碼來實現傳統的全部網頁瀏覽事件,它還實現了URL訪問歷史記錄功能。網頁導航和HTML呈現的實際工作是由右側塊形容器中的WebBrowser控件完成的。分割條和左右塊形容器都是由一個SplitContainer控件提供的。 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,并為快速開發加強了設計時支持。這些特性讓你開發分區域樣式的用戶界面或表格樣式的用戶界面時感到一樣的輕松。
也許DataGrid與GridView(表格視圖)最明顯的區別就是GridView的對象模型,它已經被抽象為一個基于列、行的自然表格結構,允許開發者通過大量直觀的定位函數來操縱每一個單元格,包括以下幾點: 通過樣式、格式、布局和選擇項支持豐富的自定義用戶界面 結合過去廣泛的設計經驗,這些新特性使我們可以快速自定義控件而不用寫很多代碼,其實是將對DataGrid的特定編碼塞進了GridView的方法、屬性和事件中。其中的一個例子就是在DataGrid中通過單擊單元格來選擇一行, 而現在以GridView的SelectionMode 屬性的方式暴露出來。當然沒有一個控件是十全十美的,當它們表現出不足時,開發者應該依靠其擴展特性來組合出具有自定義特性的控件。GridView控件的底層實現都是基于多種單元格、行和列的,你可以繼承并進行擴展??偟膩碚f,GridView作為表格樣式的控件比DataGrid更加引人注目。 類型化的數據集 GridView 控件是可以綁定數組、集合和類型化數據集的控件家族中的一員。類型化數據集的優點是:.NET框架允許控件在設計器中進行綁定以幫助開發者看到設計好的用戶界面。GridView通過在設計時自動生成數據源中每一個字段的數據來實現這項功能。Visual Studio 2005增強了類型化數據集從而使我們的生活更輕松。你將減少花在設計窗體上的時間,類型化數據集現在可以將數據源中的元數據完整的呈現出來,包括外鍵約束和遞增種子以及步驟控制。如Figure 5所示。
設計器同時也產生一個填充查詢,它封裝了查詢相關表的Select語句并且在類型化數據集中以同名方法實現。有時,系統初始指定的Select、Insert、Update和Delete語句不好用。例如,填充方法將返回所有的雇員信息,而很多時候你只是需要返回一名員工的信息。在這種情況下,使用自己指定的查詢語句并填充才是明智之舉。類型化數據集設計器允許你添加自己的查詢語句,通過在適當表格的上下文菜單中選擇“添加”|“查詢”來實現。 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顯示的那樣。
當你可以手動實現如此細致的窗體時,在Visual Studio 2005 中你也可以通過DataContainer綁定一個類型化數據集一次性實現這個窗體。僅需要簡單地從DataContainer的智能標簽中選擇名稱為這個窗體的菜單項。
如果你的界面需求改變了而且你發現表格樣式的用戶界面更合適,你可以用DataContainer來完成如此艱巨的任務,你只需要從DataContainer 中選擇適當的智能標記選項。設計器便刪除所有現存的控件,代之以一個DataGrid(在未來版本的Visual Studio中也許會是一個GridView)。 Master-detail綁定 多功能的DataContainer也是構建master-detail用戶界面的強大工具,這種界面提供了一種基于窗體的可視化效果,來展示關系數據庫中經常用到的一對多關系。例如顯示雇員--訂單關系,我們只需要簡單地將訂單表添加到類型化數據集中就可以正確配置。
既然我們已經生成了master用戶界面(如Figure 7所示),我們接下來所要做的就是將一個GridView拖拽到窗體上,并將其數據源屬性設為DataContainer,數據成員屬性設為訂單--訂單明細關系(這里為訂單--雇員外鍵約束),結果如 Figure 8。 ClickOnce 部署 當你在窗體中設置好了所有的控件,并編寫了使它們共同工作的代碼,你將要部署此應用程序。為大量的用戶們部署一個企業級的Windows窗體應用程序將會面臨一個關于安裝與版本變更的嚴峻挑戰,所以上一輩的開發者更愿意舍棄豐富的Windows用戶界面而轉向Web應用程序并享受其所帶來的部署的便利性。 配置流水線型部署 在設計時,通過在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 部署的版本控制與回滾 如果部署了一個程序,一個圖標便會添加在“開始”菜單上并且在控制面板|添加刪除程序中新增了一項。從添加刪除程序中,你可以完全卸載應用程序或者返回到前一個版本,如果存在前一個版本的話。流水線部署程序的版本控制功能主要依賴于你使用AssemblyVersion屬性所指定的版本號,AssemblyVersion屬性在AssemblyInfo.cs文件中被生成,AssemblyInfo.cs文件是每一個Windows窗體工程默認生成的。就像這樣: [assembly: AssemblyVersion("1.0.*")]
版本號被用來決定是否有一個新的版本可以用于下載。它也用來命名部署文件夾和程序所在的客戶端臨時文件夾。兩個文件夾的名稱轉換形式為程序名_主號_輔號_生成號_修訂號。 總結 當你考慮 Visual Studio 2005 中大量的新特性時,你會意識到,我們僅僅剛剛開始討論這些你會在Windows窗體開發中用到的各種技術。這些包括改進的ADO.NET和新的通過對象--關系映射訪問關系數據庫的方法,它利用了展新的ObjectSpaces技術。這里所寫的內容只向你介紹了一些最重要的新特性,并解釋了Visual Studio的易用性所帶來的生產效率的提高,從集成開發環境和設計器的改進到以前版本中控件的改進(如文本框和復合列表框)和一些全新的控件(例如GridView和WinBar)。GridView 和 DataContainer控件與增強的類型化數據集一起 ,幫助你創造豐富的數據表現形式和將數據更快地加入到應用程序。最后,ClickOnce部署簡化了Windows窗體程序部署的全過程,同時提供了與傳統安裝程序的兼容性。 作者簡介 Michael Weinhardt 現在正與 Chris Sells 一起更新他的新書《C# Windows 窗體程序設計》,并為 MSDN 在線雜志撰寫專欄文章“Windows 窗體探密”。訪問 http://www.mikedub.net 獲取更多信息。 |
||||||||||||||||
| 本文出自 MSDN Magazine 的 May 2004 期刊,可通過當地報攤獲得,或其最好是 訂閱 |
本文由 VCKBASE MTT團隊 翻譯
總結
以上是生活随笔為你收集整理的使用增强的Windows窗体为你的.Net程序打造丰富的用户界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验第三期:Vmware NSX for
- 下一篇: 洋葱炒鸡蛋禁忌