官术网_书友最值得收藏!

第1章 C#、.NET和Visual Studio簡介

2000年6月,Microsoft正式發布了一種全新的軟件開發平臺——Microsoft.NETF ramework(.NET框架),旨在提供一種創建和運行下一代應用程序和Web服務的新方式。Visual C#(簡稱為C#)是專門為.NET Framework開發的程序設計語言,它借鑒了Delphi、C++及Java的語法及主要功能,是一種類型安全的面向對象通用語言,可用于編寫任何類型的應用程序。

Visual Studio是Microsoft推出的一套完整的、基于.NET Framework的應用程序開發工具集。本書所講解的版本為Visual Studio 2015,內置最高.NET Framework版本為4.6.1,默認使用的.NET Framework版本為4.5.2。同時提供對.NET Framework 2.0、.NET Framework 3.0等版本的支持。使用Visual Studio 2015可以方便地進行Windows、ASP.NET Web和移動端等各類應用程序的開發。

本書使用Visual Studio 2015 Enterprise Update 3和Windows 10專業版作為寫作背景,但講述內容除特別聲明外也適用于Visual Studio 2008及以上各版本。

1.1 .NET Framework

.NET Framework提供了一些工具和技術,使得開發人員能夠以獨立于語言和平臺的方式創建、調試和運行應用程序或Web服務,它提供了龐大的類庫,用來以簡單、高效的方式提供對眾多常見業務的支持。

1.1.1 公共語言運行時(CLR)

公共語言運行時(Common Language Runtime,CLR)是所有.NET應用程序運行所必需的環境支持,是所有.NET應用程序的編程基礎??梢詫LR看作是一個在執行.NET應用程序時,代碼的“管理者”。通常將能夠被.NET Framework管理的代碼稱為“托管代碼”(Managed Code),反之稱為“非托管代碼”(Unmanaged Code)。

CLR主要包含有通用類型系統(CTS)、公共語言規范(CLS)、微軟中間語言(MSIL)、虛擬執行系統(VES)、內存管理和垃圾回收等模塊。

1.通用類型系統(CTS)和公共語言規范(CLS)

通用類型系統(Common Type System,CTS)可以使所有基于.NET的程序設計語言(如C#、Visual Basic等)共享相同的類型定義,從而讓這些使用不同語言編寫的應用程序使用一致的方式操作這些類型。

由于CTS要兼容于不同語言編寫的應用程序,所以它需要使用獨立于任何一種編程語言的方式來定義類型,并且需要兼顧不同編程語言之間的差異。為此,CTS提供了一個所有.NET語言都必須遵守的、最基本的規則集,稱為“公共語言規范”(Common Language Specification,CLS)。

2.微軟中間語言(MSIL)和虛擬執行系統(VES)

CTS和CLS解決了獨立于編程語言的問題,使程序開發人員可以自由地選擇自己熟悉的編程語言,甚至可以實現在同一個應用程序項目中使用不同的編程語言進行開發。但如果編譯器生成的可執行代碼不能擺脫對硬件的依賴,則上述優勢將消失殆盡。為了解決這一問題,.NET Framework在編譯托管代碼時,并未直接生成可執行的目標代碼(本機代碼),而是將其編譯成一種類似于匯編語言的、能兼容不同硬件環境的通用中間語言(Microsoft Intermediate Language,MSIL)表示的代碼。

虛擬執行系統(Virtual Execution System,VES)也稱為“托管運行環境”,它是CLR的一個重要組成部分,負責處理應用程序所需要的低級核心服務。.NET應用程序啟動時,由VES負責加載并執行MSIL代碼,由“虛擬執行系統”提供的“即時編譯器”(Just-In-Time,JIT)在程序運行階段將MSIL轉換成本計算機代碼。

3.內存管理

內存管理主要是為應用程序運行分配必要的計算機內存空間,定期回收不再使用的內存空間。在許多早期的編程語言中,這一直都是一個很麻煩的問題,稍有不慎就可能導致程序運行錯誤。在這些編程語言中,開發人員需要考慮如何在恰當的時間,合理地分配或回收計算機內存,以保證整個系統的正常運行。而在.NET中這項工作交由VES自動完成,一般情況下無須開發人員干預。這種機制提高了應用程序的穩定性,開發人員可以將關注點集中在應用程序所需的業務邏輯設計上,提高了開發效率。

1.1.2 .NET Framework類庫

.NET Framework類庫(Framework Class Library,FCL)是系統預設的、經過編譯的、用于實現一些常用功能的程序模塊集合。程序員在開發過程中只需簡單地調用其中的某些類,即可實現希望的操作,而不必關心該操作是如何實現的。.NET Framework類對用戶來說就像一個“黑匣子”,輸入原始數據或請求即可得到加工處理后的數據或實現某種操作,而不必關心黑匣子內部發生了什么。

目前,FCL中包含4000多個公有類,是當今最大的類庫之一。數量眾多、功能強大的類庫使.NET Framework具有了將復雜問題簡單化的特征,極大地提高了應用程序的運行穩定性和開發效率。

在FCL中使用“命名空間”(Name Space)將數量眾多、功能各異的.NET類劃分為不同的層次。命名空間使用點分式語法表示該層次結構(每層之間使用符號“.”進行分隔)。例如,System.Data.SqlClient表示SqlClient隸屬于Data,而Data又隸屬于System。為了減少程序代碼的輸入量,可以在項目的代碼窗口最上方使用using語句添加對所需命名空間的引用。圖1-1所示為新建一個Windows窗體項目后,由系統自動添加到項目中的命名空間引用代碼?;疑@示的部分表示已添加但并未使用的命名空間引用。

978-7-111-59051-4-Chapter01-1.jpg

圖1-1 引用命名空間

1.1.3 C#項目與.NET Framework的關系

C#項目與.NET Framework之間的關系如圖1-2所示。

可以看出,C#程序需要在.NET Framework上運行,用C#語言編寫的源代碼首先要被編譯成MSIL中間語言。中間語言代碼和資源(位圖、字符串等)以“程序集”(可執行文件,擴展名通常為exe或dll)的形式保存在磁盤中。

當執行C#程序時,程序集將被加載到CLR中,如果程序集滿足安全要求,CLR會直接執行即時編譯(JIT),將MSIL代碼轉換成本機指令。此外,CLR還提供與自動垃圾回收、異常處理和資源管理相關的一些服務。

978-7-111-59051-4-Chapter01-2.jpg

圖1-2 C#項目與.NET Framework之間的關系

由于C#編譯器生成的中間語言代碼符合通用類型系統(CTS),因此由C#生成的中間語言代碼可以與Visua lBasic、Visual C++等符合CTS的、20多種基于.NET Framework的編程語言生成的代碼進行交互。這就使得一個程序集中可能包含多個用不同語言編寫的、符合CTS規范的模塊,并且其中包含的類型也可以相互引用,就像是用同一種語言編寫的一樣。這一特征被稱為“語言互操作性”,是.NET Framework的一項重要功能。

1.2 Visual Studio項目管理

Visual Studio是Microsoft專門為.NET Framework設計的開發平臺,它將程序設計中需要的各個環節(程序組織、界面設計、程序設計、運行和調試等)集成在同一個窗口中,極大地方便了開發人員的設計工作。通常將這種集多項功能于一身的開發平臺稱為“集成開發環境”(Integrated Development Environment,IDE)。

1.2.1 新建和打開項目

在Visual Studio中,一個完整的應用系統可能會包含在若干個“項目”中,與應用系統相關的所有項目集合被稱為“解決方案”。創建一個Windows應用程序,首先需要在Visual Studio環境中創建一個新項目。

1.新建和保存項目

啟動Visual Studio后首先顯示如圖1-3所示的“起始頁”內容,如在“開始”選項組中單擊“新建項目”鏈接,將彈出如圖1-4所示的“新建項目”對話框,選擇Visual C#模板下的“Windows窗體應用程序”選項,選擇使用的.NET Framework版本(默認為.NET 4.5.2,最高支持.NET 4.6.1,同時提供對.NET 2.0和.NET 3.0的支持),并指定項目名稱、保存位置及解決方案名稱,然后單擊“確定”按鈕,系統將根據用戶設置自動創建一個“空白”的Windows窗體應用程序框架。

創建好一個Visual C#項目后,用戶可以在IDE環境中完成界面設計、代碼編寫和運行調試等。需要保存項目文件時,可單擊Visual Studio工具欄中的“全部保存”按鈕978-7-111-59051-4-Chapter01-3.jpg ,或選擇“文件”→“全部保存”命令或按〈Ctrl+Shift+S〉組合鍵。

978-7-111-59051-4-Chapter01-4.jpg

圖1-3 Visual Stutio起始頁

978-7-111-59051-4-Chapter01-5.jpg

圖1-4 “新建項目”對話框

此外,在關閉Visual Studio時系統會檢查當前項目中是否有尚未保存的文件,若有,則彈出如圖1-5所示的對話框,詢問用戶是否要保存更改。

“項目”(Project,也稱為“工程”)是Visual Studio用來標識構建應用程序的方式。它作為一個容器對程序的源代碼和相關資源文件進行統一管理和組織,項目文件是*.csproj(C#)或*.vbproj(Visual Basic)。

在Visual Studio中創建一個項目時,系統會自動創建相應的“解決方案”(Solution),解決方案文件默認與項目同名,其擴展名為sln。需要注意的是,一個解決方案中可以包含多個項目,可以將解決方案理解為“項目的容器”,將項目理解為“程序的容器”。

978-7-111-59051-4-Chapter01-6.jpg

圖1-5 保存項目文件

2.打開項目

在Visual Studio中創建一個項目時,系統會自動將項目包含到一個解決方案中,并默認為解決方案創建一個文件夾,解決方案文件(*.sln)就存放在該文件夾內。

可以通過以下幾種途徑打開已創建的項目。

1)在“起始頁”的“開始”選項組中單擊“打開項目”鏈接,在彈出的對話框中選擇解決方案文件(*.sln)將其打開。

2)通過在Windows操作系統的“計算機”或“資源管理器”窗口中直接雙擊保存在解決方案文件夾中的*.sln文件將其打開。

3)最近使用過的項目會出現在“起始頁”的“最近”選項組中,單擊其名稱可再次打開到Visual Studio集成開發環境中。

1.2.2 集成開發環境中的主要子窗口

創建了一個新項目后,系統進入如圖1-6所示的Visual Studio集成開發環境主界面。從圖中可以看到除了具有菜單欄、工具欄外,還包含許多子窗口,其中最常用的是“工具箱”“解決方案資源管理器”“屬性”和“輸出”窗口。

用戶的主要工作區域是“窗體設計器”,該窗口用來顯示Windows窗體的“設計”視圖(“Form1.cs[設計]”選項卡)或程序的“代碼窗口”(Form1.cs選項卡)。其他更多用于管理項目、調試程序等的子窗口,都可以通過在“視圖”菜單中選擇相應的命令將其打開。

978-7-111-59051-4-Chapter01-7.jpg

圖1-6 Visual Studio 2015集成開發環境

在Visual Studio集成開發環境中,有兩類子窗口,一類是在窗體設計器中顯示的窗口,如“起始頁”“代碼窗口”和“設計”視圖等;另一類是在窗體設計器周圍顯示的子窗口,如“工具箱”“解決方案資源管理器”“服務器資源管理器”“屬性”“輸出”和“錯誤列表”等。

1.解決方案資源管理器

使用Visual Studio開發的應用系統稱為一個解決方案,每一個解決方案可以包含一個或多個項目。一個項目通常是一個完整的程序模塊或類模塊,其中可能包含若干個文件。

“解決方案資源管理器”子窗口中顯示了Visual Studio解決方案的樹形結構,單擊項目名稱前面的空心或實心三角標記可以使該項展開或折疊。

如圖1-7所示,在“解決方案資源管理器”窗口中可以像Windows資源管理器那樣,瀏覽組成解決方案的所有項目和每個項目中的文件,可以對解決方案的各元素進行各種操作,如打開文件、添加內容、重命名和刪除等。在“解決方案資源管理器”窗口中雙擊某個文件,將在主窗口中顯示相應的視圖(設計視圖或代碼窗口),以便對該文件進行編輯。

2.“屬性”窗口

“屬性”窗口用于設置解決方案中各對象的屬性,當選擇Windows窗體的設計視圖、項目名稱或類視圖中的某一項時,“屬性”窗口將以兩列表格的形式顯示該子項的所有屬性。圖1-8所示為在窗體設計器中選擇了窗體控件Form1時顯示的屬性內容。

在“屬性”窗口中,左邊顯示的是屬性名稱,右邊顯示的是對應各屬性的屬性值。選擇某一名稱后,可以在右邊修改該屬性值。例如,若希望修改在窗體的標題欄中顯示的文字,可直接在“屬性”窗口中修改其Text屬性值。

在“屬性”窗口的上方有一個下拉列表框,用于顯示當前選定的對象名稱及所屬類型(如本例中Form1為對象名稱,System.Windows.Forms.Form為對象的類型)??梢栽谠撓吕斜砜蜻x擇窗體中包含的其他對象。

如果選擇的是窗體中的控件對象,在窗體的設計視圖中,被選擇對象會自動處于選定狀態(四周出現8個控制點),原來選定的對象將取消選定。

屬性名稱默認按字母順序排列,單擊窗口中的“字母排序”按鈕978-7-111-59051-4-Chapter01-8.jpg 與“分類排序”按鈕978-7-111-59051-4-Chapter01-9.jpg ,可以在兩種排序方式之間切換。

選擇設計視圖中的窗體或窗體中的某控件,并在“屬性”窗口中單擊“事件”按鈕978-7-111-59051-4-Chapter01-10.jpg ,“屬性”窗口中將顯示被選擇窗體或控件支持的所有事件列表,如圖1-9所示。

978-7-111-59051-4-Chapter01-11.jpg

圖1-7 解決方案資源管理器

978-7-111-59051-4-Chapter01-12.jpg

圖1-8 Form1的“屬性”窗口

978-7-111-59051-4-Chapter01-13.jpg

圖1-9 文本框控件的事件列表

雙擊某一事件名稱,將自動打開代碼窗口,并添加該事件處理程序的聲明,用戶可在其中填入處理響應事件的程序代碼。

“屬性”窗口的最下方有一個屬性或事件功能的說明區域,當選擇某一屬性或事件時,說明區域會顯示文字說明屬性或事件的作用,這對初學者而言很有用。如果該區域沒有顯示,可將鼠標指向窗口列表框的下部邊框,當鼠標指針變為雙向箭頭時向上拖動鼠標,該區域即可顯示出來。

在事件子窗口中單擊標題欄中的“屬性”按鈕978-7-111-59051-4-Chapter01-14.jpg ,可返回“屬性”窗口。

3.工具箱

Visual Studio工具箱中存放了眾多系統預定義的、用于組成應用程序界面的“控件”,如文本框(TextBox)、按鈕(Button)和標簽(Label)等。

默認狀態下,工具箱處于“自動隱藏”狀態,窗口的左邊框處顯示有工具箱的選項卡標簽。當鼠標指向該標簽時,工具箱將顯示到屏幕中。

工具箱用于向應用程序窗體中添加控件以構成應用程序的基本界面。利用工具箱使程序員可以像“拼圖”一樣,簡單地設計程序界面。

如圖1-10和圖1-11所示,Visual Studio將控件放在不同的分類中,各分類卡以空心三角符號表示折疊狀態,以實心三角符號表示展開狀態。默認情況下工具箱中的控件以名稱的字母順序排列,以方便用戶查找控件。需要說明的是,工具箱中的內容只有在進入窗體設計視圖時才會顯示出來。

如果進入了窗體的設計視圖,工具箱仍沒有出現在Visual Studio的IDE環境中,可選擇“視圖”→“工具箱”命令將其打開。

978-7-111-59051-4-Chapter01-15.jpg

圖1-10 公共控件

用戶不但可以從工具箱中選擇控件并將其拖動到窗體中,還可以將某一代碼片斷拖動到工具箱中暫存,以便將來重新使用。例如,可以將按鈕(Button)控件從工具箱中拖放到窗體設計視圖中,即向窗體中添加控件。也可從代碼窗口中選擇并拖出一個代碼片段到工具箱中,待將來需要重復使用該代碼段時,將其拖回代碼窗口的適當位置即可。

4.集成開發環境中子窗口的操作

如果在窗體設計器中顯示的窗體或代碼子窗口不止一個,則它們將會以選項卡的形式顯示在窗體設計器的標題欄中,可以通過單擊相應的選項卡標簽進行切換。在這些選項卡的右側都有一個“關閉”按鈕978-7-111-59051-4-Chapter01-16.jpg ,用于關閉該子窗口。被關閉的子窗口,可在解決方案資源管理器中通過雙擊對應文件的方法將其再次打開。

所有子窗口的標題欄右側都有3個操作按鈕,一個“下拉菜單”按鈕978-7-111-59051-4-Chapter01-17.jpg 、一個“關閉”按鈕978-7-111-59051-4-Chapter01-18.jpg 和一個“圖釘”按鈕978-7-111-59051-4-Chapter01-19.jpg 。下拉菜單按鈕中提供了一些關于操作子窗口的菜單項,如“??俊薄案印焙汀半[藏”等。關閉按鈕用于關閉窗口,而圖釘按鈕用于決定窗口的隱藏與顯示狀態,在顯示狀態下又分為停靠顯示與浮動顯示兩種方式。

978-7-111-59051-4-Chapter01-20.jpg

圖1-11 工具箱中控件分類

當圖釘978-7-111-59051-4-Chapter01-21.jpg 為橫向時,窗口為自動隱藏狀態,這時窗口以標簽形式顯示在Visual Studio的左、右、下邊框上。單擊標簽后窗口才會顯示,單擊窗口以外其他位置,則窗口又重新隱藏。

當圖釘978-7-111-59051-4-Chapter01-22.jpg 為縱向時,窗口為固定顯示狀態,默認為??糠绞剑创翱诟街赩isual Studio的左、右、下邊框上。這時將鼠標指向窗口的標題欄并拖動鼠標,使窗口離開邊框,窗口即為浮動顯示方式,這時標題欄上的圖釘按鈕將消失。如要使浮動方式變為停靠方式,只需拖動窗口至Visual Studio主窗口的邊框上即可。

1.2.3 Visual Studio的幫助系統

Visual Studio是一個非常龐大的應用程序開發系統,其中涉及的概念、語法及函數自然很多,這使得程序員在工作時很難將需要的知識點準確無誤地完全記憶下來。為了解決這一問題,Visual Studio提供了一個完備的幫助系統。在Visual StudioIDE中,可以使用F1幫助、智能感知和MSDN資源等多種途徑獲取相關幫助信息。

1.智能感知

在代碼編寫過程中,Visual Studio提供了“智能感知”的幫助方式。利用這種幫助方式不僅可以提高代碼輸入效率,更重要的是避免了用戶的輸入錯誤。

(1)提示類、方法或對象名

在設計代碼的過程中,當輸入類名或對象名時,Visual Studio會動態提供當前可用的類及對象列表,如圖1-12所示。如果選擇某一列表項,則在其右側動態顯示出簡要說明。用戶可通過雙擊某列表項完成自動輸入,也可以用鍵盤的〈↑〉〈↓〉方向鍵選擇所需選項后按〈Enter〉鍵。

978-7-111-59051-4-Chapter01-23.jpg

圖1-12 提示類名或對象名

C#代碼是區分大小寫的,使用智能提示就可以不用關心這一問題。例如,希望輸入的類名稱是MessageBox,在輸入時可以不考慮大小寫直接輸入首字母m,通過觀察提示列表中是否出現了希望的方法名以決定是否繼續輸入后續字母“e”。

(2)提示類成員或對象成員

希望的類或對象名已出現在智能感知列表中,且已成為當前選中項,若此時需要繼續輸入類或對象成員時,可直接輸入“.”號,系統將進一步提供新的可選項列表。例如,希望調用MessageBox類的Show方法顯示一個提示信息框,則輸入類的前兩個字母me后,類名MessageBox成為當前選中項,此時直接輸入“.”號,智能感知首先自動輸入類名MessageBox,而后動態顯示該對象所具有的3個靜態成員,如圖1-13所示,再輸入Show方法的首字母s后,該方法成為當前選中項。方法名右側顯示的是Show方法的語法格式提示。

需要特別注意的是,如果輸入“.”號后沒有出現正確的成員列表,很有可能是出現了輸入錯誤。

978-7-111-59051-4-Chapter01-24.jpg

圖1-13 顯示類成員列表

(3)提示方法的參數說明

當使用類的靜態方法或成員方法時,Visual Studio動態顯示該方法的功能、不同用法(重載)及每種用法的參數說明。如圖1-14所示,通過智能提示輸入了MessageBox.Show后,輸入后續的前括號“(”,系統將自動補全后括號“)”,并顯示方法的第1個(共21個)參數書寫格式。單擊列表框中的“向下”按鈕▼、“向上”按鈕▲或使用鍵盤上的〈↓〉、〈↑〉鍵,可依次顯示每種格式的具體用法和參數的類型及含義。

978-7-111-59051-4-Chapter01-25.jpg

圖1-14 提示方法的語法格式及重載

(4)拼寫檢查

實時進行語法、關鍵字的拼寫檢查是智能提示的另一個十分有用的功能。用戶在輸入代碼時若出現了拼寫或格式錯誤,系統將以紅色下畫波浪線、綠色下畫波浪線等形式給出提示。紅色表示錯誤,綠色表示不嚴謹。用鼠標指向出現下畫波浪線的地方,系統將顯示詳細的說明信息。

2.MSDNLi brary幫助系統

MSDN Library(https://msdn.microsoft.com,以下簡稱MSDN)提供了所有Microsoft產品(Windows、Office和Visual Studio等)的文檔資料,關于Visual Studio的幫助文檔僅是其中一部分。它包括了眾多編程技術信息和大量的示例代碼,當遇到問題時可以隨時查閱。

在Visual Studio界面中選擇“幫助”→“查看幫助”命令,將打開如圖1-15所示的關于Visual Studio的MSDN幫助網站。用戶可通過左側導航欄或右上角的搜索按鈕查找需要的信息。

3.F1幫助

F1幫助也稱為“上下文幫助”,可用于獲取窗體設計器中的控件、代碼窗口中的關鍵字和“屬性”窗口中的屬性等對象的幫助信息。使用時需要首先選中需要獲取幫助信息的對象或將插入點光標定位到代碼的關鍵字中后按〈F1〉鍵,系統將自動在MSDN中搜索,并將找到的相關幫助信息顯示到屏幕中。

978-7-111-59051-4-Chapter01-26.jpg

圖1-15 MSDN在線之Visual Studio 2015

1.3 創建簡單Windows應用程序

在Visua lStudio中創建一個簡單Windows應用程序,一般需要經過以下6個步驟。

1)根據用戶需求進行問題分析,構思出合理的程序設計思路。

2)創建一個新的Windows應用程序項目。

3)設計應用程序界面。

4)設置窗體中所有控件對象的初始屬性值。

5)編寫用于響應系統事件或用戶事件的代碼。

6)試運行并調試程序,糾正存在的錯誤,調整程序界面,提高容錯能力和操作的便捷性,使程序更符合用戶的操作習慣。通常將這一過程稱為提高程序的“友好性”。

本節將通過一個簡單加法計算器的創建過程,介紹在Visual Studio環境中使用C#語言創建Windows應用程序的基本步驟。

1.3.1 設計要求和設計方法分析

1.設計要求

要求在Visual Studio環境中設計一個Windows應用程序,程序啟動后窗體中顯示如圖1-16所示的簡單加法計算器界面。用戶分別在2個文本框中輸入數字后單擊“=”按鈕,在第3個文本框中將顯示計算結果,如圖1-17所示。

978-7-111-59051-4-Chapter01-27.jpg

圖1-16 程序界面

978-7-111-59051-4-Chapter01-28.jpg

圖1-17 簡單加法計算器

2.設計方法分析

1)程序界面由3個文本框、1個標簽和1個按鈕控件組成,文本框用于接收用戶輸入的2個操作數和輸入計算結果,標簽和按鈕用于顯示組成算式的“+”和“=”。

2)用戶單擊“=”按鈕時觸發按鈕控件的Click事件,在事件處理程序中編寫代碼將用戶輸入的2個操作數相加,并將所得結果顯示到第3個文本框中。

1.3.2 創建項目和設計界面

啟動Visual Studio后,在“起始頁”中單擊“開始”選項組中的“新建項目”鏈接,在彈出的對話框中選擇“Visual C#”下的“Windows窗體應用程序”選項,在指定了項目名稱、解決方案名稱和保存位置后單擊“確定”按鈕,進入Visual Studio集成開發環境。

新項目創建后,系統會自動創建一個空白Windows窗體,程序員可根據實際需要從工具箱向其中添加其他必要的控件,以構成希望的程序界面。

通常可以通過以下兩種途徑在設計時向窗體中添加控件。

●雙擊工具箱中的某個控件圖標。

●直接從工具箱拖動某圖標到窗體上。

本例需要向窗體中添加3個文本框(TextBox)、1個標簽(Label)和1個按鈕(Button)控件。

1.調整控件的大小和位置

(1)調整控件大小

添加到窗體的控件有默認的大小和放置位置,但往往不能恰好滿足界面設計的需要。希望調整大小時可首先單擊控件將其選中,被選中的控件四周會出現8個控制點,拖動任一個控制點即可更改控件的大小,也可通過設置控件的Size屬性值來精確指定控件的大小。本例中需要以比例恰當、美觀為原則,將窗體、文本框和按鈕的大小進行適當調整。標簽控件默認其AutoSize屬性為True,故能自動伸縮匹配Text屬性值的長度,其大小無須調整。

(2)調整控件位置

調整控件位置最簡單的方法就是使用鼠標直接將其拖動到希望的位置,也可通過設置控件的Location屬性值來精確指定控件的位置。

2.控件對齊

如果窗體中包含有眾多控件,為了界面的美觀自然存在一個對齊的問題。Visual Studio提供了一個如圖1-18所示的專門用于設置控件對齊方式的“布局”工具欄,用戶可以在配合〈Ctrl〉鍵選擇了多個控件后,單擊其中某按鈕來快速實現控件的對齊、間距設置等操作。用戶將鼠標指向工具欄中的某個按鈕時,屏幕上將顯示其功能的提示信息。

978-7-111-59051-4-Chapter01-29.jpg

圖1-18 “布局”工具欄

如果“布局”工具欄沒有顯示出來,可在Visual Studio工具欄的空白處右擊,在彈出的快捷菜單中選擇“布局”命令。“布局”工具欄提供的功能也可以通過在Visual Studio中選擇“格式”菜單中的相關命令來實現。

在窗體中拖動控件來改變其位置時,系統會自動顯示出布局參考線來協助完成相鄰控件的對齊設置。圖1-19所示為在拖動標簽控件時自動顯示出來的對齊參考線。

978-7-111-59051-4-Chapter01-30.jpg

圖1-19 對齊參考線

1.3.3 設置對象屬性

在面向對象的程序設計中,將控件或其他實體統稱為對象,而對象的外觀特征表現則需要通過對象的屬性值來表現。在Visual Studio中可以通過“屬性”窗口在程序設計時設置對象的屬性,也可以編寫代碼在程序運行時設置對象的屬性。

1.在“屬性”窗口中設置屬性

“屬性”窗口用來設置對象的初始屬性,在窗體中選擇了某對象后,“屬性”窗口將自動列出該對象的屬性名稱及默認值列表,程序員只需為某屬性設置或選擇新的屬性值即可。

本例中使用了3個文本框,它們默認的Name屬性值分別為textBox1、textBox2和textBox3;使用了1個標簽控件和1個按鈕控件,其默認Name屬性值分別為label1和button1。本例要求參照表1-1所示設置各控件的初始屬性。

表1-1 設置控件的初始屬性

978-7-111-59051-4-Chapter01-31.jpg

將控件的Name屬性設置成易于理解的名稱不是必需的,但當窗體中存在較多控件時,這種設置方法對提高代碼的可讀性很有幫助,是一種良好的編程習慣。通用的命名方法是使用控件類型標識結合能表現其作用的單詞或縮寫。例如,txtNum1中的txt表示這是一個文本框,Num1表示第一個操作數;btnResult中的btn表示這是一個按鈕控件,Result表示用于顯示計算結果。

2.通過代碼設置屬性

有些對象的屬性在程序設計時并不是確定的,可能還需要根據程序運行情況動態地進行修改,對于這類屬性,只能通過編寫代碼在程序運行時進行設置。通過代碼設置對象屬性值的語法格式如下。

對象名.屬性名=屬性值;

本例在窗體裝入事件中使用下列語句在窗體標題欄中顯示“簡單加法計算器”。

this.Text="簡單加法計算器"; //為窗體的Text屬性賦值,C#語句要以“;”結束

1.3.4 編寫代碼和調試程序

面向對象的程序設計方法采用了“事件驅動”的代碼編寫方式,也就是將特定功能的代碼片段放置在不同的事件過程中,只有觸發了對應的系統事件(由系統觸發的事件,如窗體裝入等)或用戶事件(由用戶操作觸發的事件,如單擊按鈕等)時,這些代碼才會被執行。

Visual Studio中多數控件都被預定義有若干事件,例如按鈕控件Button的Click事件(用戶單擊了按鈕時觸發);文本框控件TextBox的TextChange事件(用戶更改了文本框中的文字時觸發);窗體的Load事件(應用程序啟動,窗體被裝入時觸發)。

本例中需要編寫兩個事件的處理程序代碼。

1)在窗體加載時設置窗體的標題屬性值“簡單加法計算器”。

2)在按鈕被單擊時計算結果值并輸出。

978-7-111-59051-4-Chapter01-32.jpg

圖1-20 由系統自動創建的事件過程框架

具體操作方法如下。

在設計視圖中雙擊窗體,系統將自動切換到代碼視圖,并創建如圖1-20所示的窗體默認事件(Form1_Load)的框架,程序員只需在該框架中編寫相應的代碼即可。同樣道理,如果在設計視圖中雙擊按鈕控件,系統也將自動創建其默認事件(btnEqual_Click)的框架。

需要說明的是,代碼中“//”后面的部分為注釋內容,用于對代碼的含義加以說明和解釋,不會被程序執行。本例中需要編寫的各事件的處理程序代碼如下。

窗體裝入時執行的事件處理程序代碼如下。

978-7-111-59051-4-Chapter01-33.jpg

C#是一種強類型的編程語言,要求運算時變量的類型必須相同。例如,本例中用戶輸入到文本框中的數字是字符串類型,沒有大小的概念,僅表示一些符號的組合(如電話號碼、身份證號碼等),不能進行數學運算。所以需要將其轉換成float浮點類型數據(數值型)后,才能進行求和運算。同樣道理,計算結果是float類型,自然不能直接被文本框的字符串類型屬性Text接受,所以需要將其轉換成string(字符串)類型后,才能被輸出到文本框中。關于C#的數據類型及轉換將在第2章中詳細介紹。

用于響應各類事件的代碼編寫完畢后,可單擊工具欄中的“運行”按鈕978-7-111-59051-4-Chapter01-34.jpg 或按〈F5〉鍵運行程序,并在txtNum1、txtNum2中輸入一組數據后單擊“=”按鈕,觀察并驗證輸出結果是否正確。在程序試運行、調試階段要充分考慮用戶操作可能出現的各種情況,盡可能提高程序的容錯能力,提高程序的“友好性”。

1.4 實訓 設計應用程序界面

1.4.1 實訓目的

了解C#集成開發環境中各窗口的作用及使用方法,熟練掌握在Visual Studio環境中創建項目、保存文件及打開項目的方法;熟練掌握控件工具箱、窗體設計器和“屬性”窗口的使用方法;熟練掌握使用“屬性”窗口設置對象屬性的操作過程;熟練掌握“格式”菜單或“布局”工具欄中“對齊”“使大小相同”“水平間距”和“垂直間距”等控件布局功能,能夠快速創建美觀、大方的應用程序界面。

1.4.2 實訓要求

在C#的集成開發環境中,使用窗體設計器、控件工具箱及“屬性”窗口創建如圖1-21所示的應用程序登錄界面。

具體要求如下。

1)窗體不顯示“最小化”和“最大化”按鈕,且窗體大小不能改變。

2)程序標題“軟件學院教學管理”要相對窗體居中顯示。

3)輸入到“密碼”文本框中的任何字符均以“*”號顯示。

4)單擊“重置”按鈕時能清除上次輸入的所有數據。

978-7-111-59051-4-Chapter01-35.jpg

圖1-21 程序界面

1.4.3 實訓步驟

1.創建應用程序項目

啟動Visual Studio后在“起始頁”中單擊“開始”選項組中的“新建項目”鏈接,在彈出的對話框中選擇“模板”類型為“Visual C#”,在項目類型列表中選擇“Windows窗體應用程序”選項,在對話框上方的下拉列表框中選擇希望使用.NET Framework版本(Visual Studio 2015默認為.NET Framework4.5.2),在對話框下方為項目和解決方案命名,并指定相關文件的保存位置后,單擊“確定”按鈕完成項目創建,進入Visual Studio集成開發環境。

2.設計程序界面

設計步驟如下。

1)在窗體的設計視圖中,通過控件工具箱向窗體添加2個標簽label1、label2和1個文本框控件textBox1,按如圖1-22所示適當調整窗體和各控件的大小及位置。label1用于顯示標題文字“軟件學院教學管理”,label2用于顯示文本框輸入提示“用戶名”,textBox1用于接收用戶輸入的用戶名信息。

2)如圖1-23所示,用鼠標拖出一個包含label2和textBox1的矩形框,將這2個控件同時選中。如圖1-24所示,在按住〈Ctrl〉鍵的同時(此時鼠標指針旁出現一個表示“復制”的“+”標記)拖動選中的2個控件到適當的位置放手(先松開鼠標后釋放鍵盤),完成這2個控件的復制操作(分別用于提示和接收用戶輸入的密碼信息)。

978-7-111-59051-4-Chapter01-36.jpg

圖1-22 添加控件

978-7-111-59051-4-Chapter01-37.jpg

圖1-23 選擇多個控件

978-7-111-59051-4-Chapter01-38.jpg

圖1-24 拖動復制多個控件

可以看到,通過復制得到的標簽上顯示的默認文本與源控件相同,都是label2。選中復制得到的控件,在“屬性”窗口中可以看到系統自動將其Name屬性分別設置為label3和textBox2,是源控件Name屬性的自動延續。

3)從工具箱中繼續向窗體中添加2個按鈕控件button1、button2,初步設計完成的程序界面如圖1-25所示。

3.設置對象屬性

各控件的初始屬性設置如表1-2所示。設置完畢后的程序界面如圖1-26所示(注意,此時的程序標題并沒有相對窗體居中顯示)。

978-7-111-59051-4-Chapter01-39.jpg

圖1-25 初步完成的界面設計

978-7-111-59051-4-Chapter01-40.jpg

圖1-26 完成控件的初始屬性設置

表1-2 設置控件屬性

978-7-111-59051-4-Chapter01-41.jpg

4.編寫程序代碼

在窗體設計器中雙擊窗體,切換到代碼編寫窗口,按如下所示編寫窗體裝入時和“重置”按鈕被單擊時執行的事件處理程序代碼。雙擊窗口,系統將自動創建窗體裝入時的事件處理程序框架。同樣,在窗體設計器中雙擊“重置”按鈕,系統將自動創建該按鈕的單擊事件處理程序框架。

窗體裝入時執行的事件處理程序代碼如下。

978-7-111-59051-4-Chapter01-42.jpg

“重置”按鈕被單擊時執行的事件處理程序代碼如下。

978-7-111-59051-4-Chapter01-43.jpg

5.運行和調試程序

按〈F5〉鍵運行程序,觀察界面設計是否得當,測試“重置”按鈕被單擊時是否能實現預期的程序功能。反復多次測試運行,直至所有問題均被糾正。

6.保存或打開項目

(1)保存項目文件

保存項目文件通常可通過以下兩種途徑來實現。

1)在Visual Studio集成開發環境中若單擊工具欄上的“運行”按鈕978-7-111-59051-4-Chapter01-44.jpg 或按〈F5〉鍵運行程序,系統將自動保存所有項目文件到創建項目時指定的文件夾中。

2)在設計過程中用戶也可單擊工具欄中的“保存窗體文件”按鈕978-7-111-59051-4-Chapter01-45.jpg 或“保存所有文件”按鈕978-7-111-59051-4-Chapter01-46.jpg ,隨時保存項目文件。此外,用戶在關閉Visual Studio窗口時系統也會判斷用戶是否在修改了文件內容后沒有執行保存操作,若沒有執行保存操作,則彈出對話框提示用戶保存文件。

(2)打開項目

常規的方法是啟動Visual Studio,選擇“文件”→“打開解決方案”命令,在彈出的對話框中找到保存項目的文件夾,雙擊解決方案文件(*.sln)即可打開程序項目。

此外,啟動Visual Studio時,若在“起始頁”的“最近”選項組中包含有要打開的項目名稱,則單擊該名稱也可打開對應的程序項目。

主站蜘蛛池模板: 南开区| 遂宁市| 鄯善县| 朝阳区| 常德市| 上蔡县| 天等县| 洱源县| 谷城县| 耒阳市| 渑池县| 桐柏县| 土默特右旗| 乐山市| 新巴尔虎左旗| 黑龙江省| 平遥县| 南部县| 贵州省| 惠安县| 吉木萨尔县| 中阳县| 阿坝县| 松潘县| 南江县| 哈密市| 靖边县| 车致| 海原县| 古蔺县| 宜丰县| 永宁县| 攀枝花市| 南召县| 安岳县| 贡觉县| 上饶县| 亳州市| 太湖县| 类乌齐县| 柳州市|