C# Windows Forms應用程序淺談
作為一個Windows開發者, 你應毫不猶豫成為Microsoft新的。NET的倡導者。在規范的客戶端應用程序成為流行的同時,越來越多的組織正趨向于簡單的,基于瀏覽器的可以通過網絡交互(通常是Internet)的應用程序。
這就意味著編程正在從獨立的應用程序模式向更豐富的面向組件的模塊化應用程序轉變。
.NET平臺正是為推動這一運動——特別是被稱為Windows Forms的。NET用戶界面模型……NET使用了Windows Forms來編寫一個應用程序的用戶界面。你可以使用C#或Visual Basic.NET來創建這些特性。在這里我將向你展示C#為。NET平臺創建基于Windows Forms用戶方面的作用。這里的例程就是一個用C#寫的基于Windows Forms的tic-tac-toe游戲。
每過幾年,Windows的編程方式就會發生巨大的變化。去年夏天的Microsoft Professional Developers Conference (PDC)把Windows的開發者領回到了square one.而在幾年前,平臺才剛剛從DOS轉變為Windows.現在,開發者已經解決了桌面上的問題。新的方向是開發Internet 框架來讓愈來愈多的公司能搬到Web上。
在八十年代末,Windows開發者使用C和SDK寫了大量的桌面應用程序,然后就是C++和框架,如Microsoft Foundation Class Library(MFC)。與此同時,VB開發領域也得到了堅實的立足點。在擁有強大優勢諸如強大的開發環境和可管理開發者資源的runtime的面前,VB正逐步走向成熟,成為許多企業開發前端和中間層組件的得力工具。對于大多數其他應用程序,開發者都可以使用Windows Forms來創建用戶界面。
讓我們先總體看一下Windows Forms,然后再看一下使用C#來寫基于C# Windows Forms應用程序需要些什么。在外殼下,所有的Windows應用程序都是以同樣的方式運行的。Windows會維護Windows類的集合(即windows的行為都是在WndProc()函數中定義的)。在Windows編程的早期,***的任務就是寫大約80行的樣板代碼為了能讓它正確的運行,后來逐漸通過添加事件句炳來開發應用程序。MFC就使得開發者不用再去為Winmain()和WndProc()費神了。Windows Forms繼承了這種忽略編程細節的趨勢,所以你不必花大量的時間在書寫那些枯燥的代碼上。
隨著基于SDK和MFC的發展,你可能仍然保留作為開發者對Windows API的鐘愛。如果你需要嚴格的控制你的應用程序,使用C和SDK——或甚至是MFC來開發應用程序是必要的。如果你希望有靈活性,基于SDK或MFC的開發仍然是需要的。但是如果你覺得一個更簡單,更直觀的開發環境比嚴格控制或靈活性更重要的話,使用Windows Forms來開發基于窗體的用程序可能更適合你。
編寫客戶代碼
有了Windows Forms,你就可以編寫.NET平臺的客戶代碼。如果你曾使用過VB,你就可能對它基于窗體的應用程序模型很熟悉。而Windows Forms與此很相似。SDK或MFC的編程風格是直接與Windows API交互的,甚至當MFC中出現了框架,你仍僅僅是從底層的Windows API邁出了一小步。與此相反,Windows Forms隱藏了舊式Windows編程風格中的樣板代碼的細節,以帶有菜單和標題欄的正規窗體的形式顯示。Windows Forms能響應標準的事件,如鼠標的移動和菜單的選擇,而且它們也可以控制在客戶區的行為。然而,管理這些特性的語法比你用SDK或MFC編寫程序的語法要抽象的多。
你可以以標準的窗口、多文檔界面(MDI)、對話框或繪圖程序表面的形式顯示Windows Forms.隨著VB的發展,它使用了用戶界面(UI)發展中的窗體模型,即給一個Windows 窗體定義用戶界面,通常就是意味著能在窗體的客戶區安放控件。但是Windows Forms還可以更好的渲染你所希望的繪圖表面。
除了能渲染繪圖表面和管理標準控件集,Windows Forms通過屬性來定義它們的外觀。例如,要想編程在屏幕上移動一下Windows窗體,你只要設置Windows 窗體的X屬性。Windows Forms使用方法來管理它們的行為,而且它們也可以通過響應事件來定義與用戶的交互。
Windows Forms是在。NET Framework或Common Language Runtime(CLR)中運行的類的實例。編寫一個C# Windows Forms應用程序通常就是實例化WinForm類的一個實例,配置它的屬性并建立事件句柄。因為一個Windows 窗體就是一個標準的基于CLR的類,是完全支持繼承的,你可以以標準的,面向對象的方式來建立基于Windows Forms的類之間的繼承關系。
現在,讓我們看一下開發環境。Microsoft的Visual Studio.NET不斷在進步。不幸的是,IDE的PDC Tech Preview版本不是很穩定。所以我用C#開發的開發環境中包含一個文本編輯器和一個命令行編譯器。Beta 1解決了很多方面,使VS.NET成為開發C#應用程序的可行環境。
但是如果你不喜歡使用VS.NET的beta版,那你也可以回到命令行的方式。C#的命令行編譯器名為CSC.EXE.當運行它時,它通過命令行決定輸出的位置、需要的資源文件、應用程序要使用的系統文件和***可執行文件中要包含的C#文件。例如,以下命令行編譯了一個名為someApp.cs的文件,引入了System.DLL的多種系統功能,在資源中包含了一個JPG文件,并且把最終的可執行文件放到名為bin的目錄下:
csc /out:bin /R:System.DLL /res:XYZ.JPG someApp.cs
我們再一次回到了1989年你用命令行編譯器通過一些批處理文件或makfiles來創建一個Windows應用程序的時候。在開發tic-tac-toe例程時,我也在一個簡單的批處理文件中使用了命令行編譯器。
現在,你可以通過C#和VB來使用Windows Forms.這兩種語言在建立基于Windows Forms的應用程序方面是等同的。你可以使用它來創建大量當今需要的編程構架——特別是當開發基于C# Windows Forms應用程序。
【編輯推薦】