淺談利用Visual C#開發Windows Form程式

作者/康惟翔

前言 C#(C Sharp)是微軟(Microsoft)為.NET Framework量身訂做的程式語言,C#擁有C/C++的強大功能以及Visual Basic簡易使用的特性,是第一個元件導向(Component-oriented)的程式語言,同時和C++與Java一樣亦為物件導向(object-oriented)程式語言。 C#擁有的最大優勢為,其是由微軟推出的產品,微軟藉由極高的市占率讓C#可以擁有很好的相容性,同時C#與Java其實在很多功能上是很類似的,只是使用的定義方式不同,實質上都可以達到相同的功能。因此,物件導向式C#語言承襲C++及Java的諸多優點,更融合了Visual Basic的易學易用特色,集合眾多的優點於一身,絕對是程式設計師最好的開發利器之一。 以筆者本身工作經驗為例,在專案上需要豐富的User Interface,並且撰寫自己的元件,以及使用wcf的服務,同時因為大部分的使用者都使用Windows的系統,為了達到良好的相容性,以及方便使用windows的既有工具等需求,我們挑選了C#來進行專案開發。 Visual C# 與 TFS 基本介紹 專案使用Visual Studio 2008進行開發,執行時需注意要以系統管理員的身分進行執行,進入後的畫面如下圖一,進入的畫面可以看到最近登入過的專案,左側點選之後即可直接開啟專案。

《圖一》Visual Studio 2008 進入畫面
TFS (Team Foundation Server)是微軟所提供的一套專案管理系統,裡面可以放很多不同的專案,並去設定不同帳號的不同權限,在取得TFS管理者所設定的帳號與權限以後,就可以在檢視裡面的Team總管進行設定(相關設定在微軟的MSDN Library有介紹),之後就可與Server進行連接並下載所屬的專案到本機上。 (如圖二)。

《圖二》TFS設定完以後,所看到的所屬專案畫面
下載完成之後,未來對於專案裡面程式的修改就可以簽入至Server上(如圖三)。同時,同專案的人將可以看到修改的歷史記錄並且標示哪些程式並非最新版,並自動幫開發者發現程式的衝突來加以處理,避免專案成員在修改程式上發生互相覆蓋的情況。

《圖三》TFS的專案管理畫面
專案開啟之後,有鎖的符號代表開發人員並未修正,打勾則代表開發人員修正在本機程式上尚未簽入,加號代表本機新增程式但尚未簽入。針對尚未簽入的程式,可在程式上點選右鍵進行簽入、復原、觀看記錄等各種動作(如圖四)。

《圖四》各程式當前狀態畫面
Visual的架構下,一個方案裡面可以包含著很多的專案,各個專案間可以互相呼叫與使用,同時專案可選擇要使用型態,如:Windows Form,安裝類型的專案,VB專案等。 專案底下即包含著各個單隻程式,如圖五所示。依正常的專案架構,會將同樣功能的程式設定在同樣的專案底下,依此做分門別類以及設定層級呼叫,同時也可以方便處理與追蹤問題。

《圖五》Visual Studio 專案與方案與程式間的差別
Windows Form 程式 因為程式需要使用到大量畫面給使用者操作,所以使用Windows Form此一範本去進行程式開發。同時我們有設定幾個基底畫面,讓畫面去繼承那些基底,以保持畫面的一致性以及減少一些開發步驟,如圖六。

《圖六》Visual Studio Windows Form套用基底之後畫面
接著就可以利用工具箱去完成每一個畫面的設計,只須簡單的拖曳工具箱裡面的各個元件,就可以讓其在畫面上顯現,如圖七。

《圖七》利用工具箱所完成的Windows Form畫面
Visual Studio提供了兩個很好用的功能,分別是屬性以及事件,這兩個功能可以設定的範圍囊括所有的元件,大至整個畫面,小至各個元件都可以進行設定。 屬性的功能,大部分是設定元件的直觀可視部分,包含字型、字體、大小、文字顯示的名稱等,許多功能都可以在這邊做設定。同時,針對不同類型的元件,屬性的設定上也會有所差異,屬性的設定畫面如圖八。

《圖八》Windows Form屬性設定畫面
當我們將外觀都處理好,只能算是擁有一個美麗的殼,因為尚未去撰寫每一個元件的功能,而這些功能,可藉由事件來幫我們先完成前置動作,可以在原本屬性的上方,將其換成閃電的符號。 事件,其實就是一個需要觸發的動作,如同按下了一個Button的動作、或是離開了一個TextBox、切換Tab的動作等。Visual Studio提供了很多事件的觸發點供程式開發人員使用,當這些情況被觸發時,就會去執行開發人員所要求他們做的動作,當需要此事件時,只要點擊兩下,Visual Studio會自動帶出基底的程式碼,開發人員只要接續在其上做開發即可。事件的設定如圖九。

《圖九》Windows Form事件設定畫面
因此,利用Visual Studio所提供的屬性與設定來完成我們需要的畫面,同時,除了使用工具箱所提供的各式元件之外,也可以自己去定義新的元件,舉例來說,新增一個元件類別,藉由工具箱提供的元件如:TextBox,並且在設計的元件類別裡面撰寫好程式碼,後續會新增到工具箱,那我們之後就可以從工具箱中拖曳我們設計好的新元件,在程式執行時就會去執行新元件的程式碼,進而得到我們想要的東西。當然,元件的設計應該以共用的目的為主,並不適合為了某單一程式而去新增元件,應該要以大部分程式的需求為主,並且規範在某情況之下必須使用此一元件,進而達到程式的一致性以及修改的便利,如圖十。

《圖十》自行定義工具箱工具畫面
WCF (Windows Communication Foundation) 完成Windows Form之後,我們已經有了畫面,接著就需要資料,因此我們有一個Oracle的資料庫,來針對資料進行存取的動作。 在跟Oracle進行資料傳輸時,使用WCF做為中介,最主要的原因是,這樣只要選定一台Server並且在那台Server上安裝Oracle的應用程式即可,不需要每一個使用我們程式的使用者都去安裝Oracle,因此現在對於WCF做一個簡單的介紹。 WCF是一個Client-Server的架構,在Server上會有endpoint,即service 公佈給其它程式呼叫的介面,而client 端則透過 proxy 呼叫遠端 WCF 公開的介面 (operation),將 message 透過 proxy 傳給遠端的 service。 一個 WCF 服務可以同時擁有多個 channel,WCF 已經設計好許多 channel,稱之為 binding。Binding 定義 client 端如何與 service 端連線和通訊,包含傳輸、編碼、安全性設定、可靠性設定…等。 在程式上,把要去資料庫做的操作都放到Server上執行,因此使用者從操作那端去呼叫Server上的介面,再藉由繼承介面的程式來執行需要做的事情,其概念如圖十一。

《圖十一》介面以及Server上執行相對應程式的範例
使用者操作的介面也必須去設定跟Server的連通,如同上面所述,binding定義了Client端與Server的連線設定,其設定如圖十二。

《圖十二》binding設定
Server上會有endpoint,因此必須讓Client知道他所連接的endpoint位置,因此也必須去設定好Server上的endpoint位置;同樣的,Server上也必須建立endpoint,同樣的也需要去設定,其設定例子如圖十三。

《圖十三》Client 端endpoint設定

《圖十四》Server端endpoint設定
最後,本機執行起來,開啟WCF服務後的畫面如圖十五。

《圖十五》
總結 Visual Studio最大的優勢就在於,其是由Microsoft所設計的程式語言,因此有很好的相容性,同時可以跟很多Microsoft所開發的其他工具一起做配合,這邊只簡略介紹了WCF以及TFS,其餘還有SQLServer、Reporting Service等等。 同時,由於Microsoft的高市占率,在發生問題時,在網路上可以很容易的尋找到解決問題的方向,對於在處理以及了解問題上可以得到很大的幫助。 Windows From所提供的豐富元件,幫助完成各式各樣的需求,例如:在設計上也可以匯入或匯出Excel,Word、利用本機的圖片來豐富背景圖案、利用不同字型標識關鍵的地方、利用小圖片的點擊觸發事件等,同時設計並不侷限在單一個畫面,利用單一畫面的事件觸發,我們可以接續開啟下一個畫面,所以,能夠了解並善用Visual所提供的功能,其實會發現Visual Studio可以達到許多的需求,是一套非常強大的軟體。 參考資料 WCF Service介紹