《C#程序設(shè)計(jì)及基于工作過程的項(xiàng)目開發(fā)》課件第1章_第1頁
《C#程序設(shè)計(jì)及基于工作過程的項(xiàng)目開發(fā)》課件第1章_第2頁
《C#程序設(shè)計(jì)及基于工作過程的項(xiàng)目開發(fā)》課件第1章_第3頁
《C#程序設(shè)計(jì)及基于工作過程的項(xiàng)目開發(fā)》課件第1章_第4頁
《C#程序設(shè)計(jì)及基于工作過程的項(xiàng)目開發(fā)》課件第1章_第5頁
已閱讀5頁,還剩99頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一部分快速熱身1.1任務(wù)一:第一個(gè)控制臺程序1.2任務(wù)二:第一個(gè)Windows程序1.3任務(wù)三:在程序中使用數(shù)據(jù)1.4任務(wù)四:讓程序?yàn)槲覀冇?jì)算1.5舉一反三1.1任務(wù)一:第一個(gè)控制臺程序

1.1.1功能描述

本例將創(chuàng)建一個(gè)簡單卻結(jié)構(gòu)完整的C#控制臺程序,程序運(yùn)行結(jié)果是在用戶屏幕上輸出一行文本。

通過本任務(wù),我們應(yīng)學(xué)會(huì):

創(chuàng)建一個(gè)結(jié)構(gòu)合理的控制臺程序并運(yùn)行調(diào)試;

能夠使用控制臺輸出函數(shù)WriteLine輸出各種字符串及特殊字符。

1.1.2任務(wù)步驟

在VisualStudio(簡稱VS)中創(chuàng)建控制臺應(yīng)用程序的步驟如下:

(1)打開VisualStudio,選擇“文件→新建→項(xiàng)目”,彈出“新建項(xiàng)目”對話框,如圖1.1所示。單擊模板中的“控制臺應(yīng)用程序”,輸入一個(gè)“名稱”,選擇要存放的“位置”,然后單擊“確定”按鈕。1.1.2任務(wù)步驟

在VisualStudio(簡稱VS)中創(chuàng)建控制臺應(yīng)用程序的步驟如下:

(1)打開VisualStudio,選擇“文件→新建→項(xiàng)目”,彈出“新建項(xiàng)目”對話框,如圖1.1所示。單擊模板中的“控制臺應(yīng)用程序”,輸入一個(gè)“名稱”,選擇要存放的“位置”,然后單擊“確定”按鈕。圖1.1

(2)?VisualStudio2005為我們創(chuàng)建了控制臺應(yīng)用程序模板。我們在Main函數(shù)的花括號里填入三行代碼,形成一個(gè)最簡單控制臺程序,代碼展示如下:

1/*日期:09-03-22

2第一個(gè)控制臺程序*/

3usingSystem;

4usingSystem.Collections.Generic;

5usingSystem.Text;

6namespacehello_world

7{

8classProgram

9{

10staticvoidMain(string[]args)

11{

12//以下三行是我們輸入的語句,其它是VisualStudio為我們自動(dòng)生成的。

13Console.WriteLine("你知道標(biāo)準(zhǔn)計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?");

14Console.WriteLine("A.105\nB.106\nC.107\nD.108");

15Console.ReadKey();

16}

17}

18}程序輸出為:

你知道標(biāo)準(zhǔn)計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?

A.105

B.106

C.107

D.108代碼分析:

1~2、12注釋語句。注釋起著文檔說明的作用,不參與編譯。

3~5

using語句。使得程序可以使用一個(gè)簡單的控制臺程序所需要的那些常用服務(wù)。刪除這3行將使程序不能編譯(實(shí)際上,由于本程序只用到最簡單的Console對象,而Console對象是在System類中的,所以只要第3行“usingSystem;”也是可以的)。

6 告訴VisualStudio我們創(chuàng)建了一個(gè)名稱空間(應(yīng)用程序庫)叫做hello_world;實(shí)際上這個(gè)名稱就是創(chuàng)建程序時(shí)在“新建項(xiàng)目”對話框中輸入的名稱。

8 C#程序都是由class(類)組成的,它為程序定義了一個(gè)容器。這里表示接下來的程序(9~17行的一對花括號{}中)是屬于一個(gè)叫做Program的類的。

10

staticvoidMain為程序定義了入口點(diǎn)。應(yīng)用程序啟動(dòng)時(shí),Main方法是第一個(gè)調(diào)用的方法,程序總是以Main函數(shù)后的一對花括號為開始和結(jié)束。一個(gè)C#應(yīng)用程序 只能有一個(gè)入口點(diǎn)。

13

WriteLine方法將指定字符串顯示到屏幕上,要顯示的字符串用雙引號(“”)括住。

WriteLine方法是Console對象的一部分。

14分4行顯示4個(gè)選項(xiàng)。這里用到轉(zhuǎn)義字符,在輸出函數(shù)的花括號中,由斜杠“\”開頭的字符表示某種特殊含義。比如這里的“\n”表示回車。

15

ReadKey和WriteLine方法一樣,都是C#的標(biāo)準(zhǔn)類庫的方法。將它放在這里程序?qū)?huì)等待用戶的輸入,我們必須按下Enter鍵才能終止程序。這樣我們就有時(shí)間查看程序運(yùn)行的結(jié)果了。如果沒有這句,則程序在第15行執(zhí)行完后將關(guān)閉,我們看到的將是閃了一下就關(guān)閉的控制臺屏幕。

注意:類、方法及名稱空間以“{”開始,以“}”結(jié)束。其它所有普通語句都以分號“;”結(jié)束。丟失“;”將導(dǎo)致編譯失敗。1.1.3知識點(diǎn)1——注釋及空白符的使用

1.注釋

注釋是獨(dú)立于代碼的文檔,不參與編譯,是程序員用來交流想法的途徑。注釋通常反映程序員對代碼邏輯的見解。因?yàn)槌绦蚩赡軙?huì)使用一段比較長的時(shí)間,并在這段時(shí)間內(nèi)多次修改。而需要修改時(shí),程序員經(jīng)常已經(jīng)記不起特殊的細(xì)節(jié),或者已經(jīng)找不到原來的程序員了。這樣從頭去理解程序要花費(fèi)大量的時(shí)間和精力。所以好的注釋文檔是相當(dāng)重要的。

C#的注釋有兩種形式:

一種是多行注釋:/**/,在/*和*/之間的語句都不參加編譯。

另一種是單行注釋://,即本行//后的語句為注釋,不參與編譯。

注釋的作用主要有兩點(diǎn):

一是讓程序員之間更好地交流。一般情況下,程序員習(xí)慣在程序的開頭加上一段注釋,標(biāo)明該程序的基本信息。注釋也經(jīng)常用在一些較難理解的程序行后,起到解釋的作用。

二是在調(diào)試程序時(shí)通過注釋來使一些不確定的代碼不參加編譯,以便幫助程序員找出錯(cuò)誤代碼。

2.空白符

C#程序使用空白符來分隔程序中使用的詞和符號。空白符包括空格、制表符和換行符。正確使用空白符可以提高程序的可讀性。

C#程序中,單詞之間必須用空白符來分隔。其它空白符都將被編譯器忽略,不會(huì)影響到程序的編譯和運(yùn)行結(jié)果。但一個(gè)好的程序員應(yīng)該養(yǎng)成合理使用縮進(jìn)和對齊的好習(xí)慣,從而使程序的結(jié)構(gòu)更加清晰。比如說以下兩個(gè)程序都能編譯成功,但你更愿意讀哪個(gè)?1.1.4知識點(diǎn)2——Write和WriteLine方法、字符串連接

1.?Write和WriteLine方法的基本應(yīng)用

在該任務(wù)中,我們觸發(fā)了如下的WriteLine函數(shù)的語句:

Console.WriteLine("你知道標(biāo)準(zhǔn)計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?");

在這個(gè)語句中,Console是C#的控制臺類,WriteLine方法是Console類為我們提供的一項(xiàng)服務(wù)。該服務(wù)的功能為在用戶屏幕上輸出字符串。可以說,我們把數(shù)據(jù)通過WriteLine方法發(fā)送消息給Console,請求打印一些文本。

我們發(fā)送給方法的每個(gè)數(shù)據(jù)都稱為參數(shù)(parameter)。在這個(gè)例子中,WriteLine方法只使用了一個(gè)參數(shù):要打印的字符串。

Console類還提供了另一種我們可以使用的類似的服務(wù):Write方法。Write方法和WriteLine方法的區(qū)別很小,但我們必須知道:WriteLine方法打印發(fā)送給它的數(shù)據(jù),然后光標(biāo)移到下一行的開始;而Write方法完成后,光標(biāo)則停留在打印字符串的末尾,不移動(dòng)到下一行。例如:

Console.Write("我所遇見的每一個(gè)人,");

Console.WriteLine("或多或少都是我的老師,");

Console.Write("因?yàn)槲覐乃麄兩砩蠈W(xué)到了東西。");

Console.WriteLine();

Console.Write("-----愛默生");其運(yùn)行結(jié)果為:

我所遇見的每一個(gè)人,或多或少都是我的老師,

因?yàn)槲覐乃麄兩砩蠈W(xué)到了東西。

-----愛默生

注意:WriteLine方法是在打印完發(fā)送給它的數(shù)據(jù)后,才將光標(biāo)移動(dòng)到下一行的。

2.字符串連接

在知識點(diǎn)1中,我們看到,在程序中,代碼是可以跨越多行的。因?yàn)榫幾g器是以分語句結(jié)束標(biāo)識的,回車換行不影響程序的編譯。

但是,“”中的字符串文字不能跨越多行!比如:下面的程序語句語法是不正確的,嘗試編譯時(shí)將會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

Console.WriteLine(“你知道標(biāo)準(zhǔn)計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?

我還真是沒注意到。");因此,如果我們想要在程序中打印一個(gè)比較長,無法在一行內(nèi)寫完的字符串,就可以使用字符串連接(stringconcatenation)將兩個(gè)字符串頭尾相連。字符串連接的運(yùn)算符是加號(+)。例如,下面的表達(dá)式將三個(gè)字符串和一個(gè)變量連接起來,產(chǎn)生一個(gè)較長的字符串:

Console.WriteLine("你知道標(biāo)準(zhǔn)的計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?"+

"我知道,總共有"+keys+"個(gè)按鍵。");在該程序中,WriteLine方法的調(diào)用使用了4條信息,有字符串,有變量(keys)。在引用變量keys時(shí),使用當(dāng)前存儲在變量keys中的值(整型值107)。所以,在調(diào)用WriteLine時(shí),獲取keys的值107。這是個(gè)整數(shù),WriteLine將它自動(dòng)轉(zhuǎn)換成字符串并和原來的字符串連接,連接后的字符串傳遞給WriteLine打印到屏幕上。打印結(jié)果為:

你知道標(biāo)準(zhǔn)的計(jì)算機(jī)鍵盤有多少個(gè)按鍵嗎?我知道,總共有107個(gè)按鍵。

3.轉(zhuǎn)義序列

在C#中輸出字符串時(shí),雙引號("?)用于指示一個(gè)字符串的開始和結(jié)束。假如我們想打印出一個(gè)引號來,將它放在一對雙引號中("""),編譯器會(huì)感到困惑,因?yàn)樗J(rèn)為第2個(gè)引號是字符串的結(jié)束,而不知道對第3個(gè)引號該如何處理,結(jié)果導(dǎo)致一個(gè)編譯錯(cuò)誤。

C#?語言定義了一些轉(zhuǎn)義序列(escapesequence)來表示特殊字符,如表1.1所示。轉(zhuǎn)義字符由反斜杠開始(\),它告訴編譯器,后面跟的一個(gè)或者多個(gè)字符應(yīng)該按照特殊的方式來解釋編譯。1.1.5知識點(diǎn)3——運(yùn)行與調(diào)試:逐語句調(diào)試

程序編寫完后,就可以運(yùn)行查看結(jié)果了。在VisualStudio2005中,選擇“調(diào)試→啟動(dòng)調(diào)試”,若程序沒有語法錯(cuò)誤,就能直接運(yùn)行出結(jié)果;否則調(diào)試終止。啟動(dòng)調(diào)試的快捷鍵為F5。

此外,還可選擇“調(diào)試→逐語句”,若程序沒有語法錯(cuò)誤,則VisualStudio2005編譯器將從Main函數(shù)開始,逐行執(zhí)行代碼,正在執(zhí)行的代碼行以黃底高亮顯示,如圖1.2所示。采用逐語句調(diào)試可以逐行查看代碼運(yùn)行過程的詳細(xì)情況。當(dāng)程序出現(xiàn)運(yùn)行錯(cuò)誤時(shí)(沒有語法錯(cuò)誤,但運(yùn)行出來的結(jié)果和我們預(yù)計(jì)的不一樣),也可以通過逐語句運(yùn)行來幫助找出錯(cuò)誤所在。逐語句調(diào)試的快捷鍵為F11。圖1.21.2任務(wù)二:第一個(gè)Windows程序

1.2.1VisualStudioC#IDE簡介

VisualStudioC#集成開發(fā)環(huán)境(IDE)是一種通過常用用戶界面公開的開發(fā)工具的集合。用戶可以通過IDE中的窗口、菜單、屬性頁和向?qū)c這些開發(fā)工具進(jìn)行交互。我們將在這里介紹開發(fā)項(xiàng)目的過程中常用的一些功能。打開VisualStudio,IDE的默認(rèn)外觀如圖1.3所示。圖1.3圖1.3中所示工具的窗口都可從“視圖”菜單打開。其中,較常用的有以下4種:

(1)代碼編輯器:用于編寫源代碼。

(2)工具箱和Windows窗體設(shè)計(jì)器:用于使用鼠標(biāo)迅速開發(fā)用戶界面。

Windows窗體設(shè)計(jì)器和代碼編輯器在IDE的同一個(gè)位置上,可以通過上方的頁面選擇切換,如圖1.4所示。圖1.4窗體設(shè)計(jì)器窗口:代碼編輯窗口:

(3)“屬性”窗口:用于配置用戶界面中控件的屬性和事件。

(4)解決方案資源管理器:可用于查看和管理項(xiàng)目文件和設(shè)置。該窗口以分層樹視圖的方式顯示項(xiàng)目中的所有文件。創(chuàng)建Windows窗體項(xiàng)目時(shí),默認(rèn)情況下,VisualC#會(huì)將一個(gè)窗體添加到項(xiàng)目中,并為其命名為Form1。表示該窗體的兩個(gè)文件稱為Form1.cs和Form1.Designer.cs。這些文件列表我們都可以在“解決方案資源管理器”中查看到,如圖1.5所示。圖1.5圖1.5中:

Form1.cs是我們寫入代碼的文件。

Form1.Designer.cs文件中的代碼是Windows窗體設(shè)計(jì)器自動(dòng)寫入的,這些代碼用于實(shí)現(xiàn)所有通過從“工具箱”中拖放控件執(zhí)行的操作。我們在該文件中就可以看到對應(yīng)窗體所有控件的屬性及事件。如該任務(wù)中“改變標(biāo)簽大小”按鈕在Designer.cs中的代碼如下:

this.btnSize.Location=newSystem.Drawing.Point(292,277);

this.btnSize.Name="btnSize";

this.btnSize.Size=newSystem.Drawing.Size(111,28);

this.btnSize.TabIndex=3;

this.btnSize.Text="改變標(biāo)簽大小";

this.btnSize.UseVisualStyleBackColor=true;

this.btnSize.Click+=newSystem.EventHandler(this.btnSize_Click);1.2.2功能描述

本例將創(chuàng)建一個(gè)簡單卻完整的C#WinForms程序,該程序包含兩個(gè)窗體,在程序運(yùn)行時(shí),先顯示版權(quán)說明窗體,關(guān)閉版權(quán)窗體后才能顯示出主窗體。版權(quán)窗體如圖1.6所示。圖1.6主窗體中包含一個(gè)label控件和三個(gè)button(按鈕)。通過代碼實(shí)現(xiàn)對label的字體、背景及大小的設(shè)置。主窗體如圖1.7所示。圖1.7通過本任務(wù),我們應(yīng):

理解窗體控件的屬性和事件的作用;

能夠使用基本控件設(shè)計(jì)窗體界面;

能夠編寫簡單的事件處理程序。圖1.8

(2)選擇“Windows應(yīng)用程序”→輸入“名稱”→選擇存放的“位置”→點(diǎn)擊“確定”。VisualStudio創(chuàng)建出一個(gè)默認(rèn)窗體,該窗體就是本任務(wù)的主窗體。在右側(cè)我們看到了一個(gè)解決方案管理器(SolutionExplorer)。向?qū)樾马?xiàng)目增加了一個(gè)Form1.cs文件。

注:我們可以為Form1.cs重命名。在解決方案管理器中的Form1.cs上右擊,選擇“重命名”,輸入窗體名稱。這里,我們將其重命名為“mainFrm”。

我們應(yīng)當(dāng)養(yǎng)成給窗體取一個(gè)可“顧名思義”的名稱的好習(xí)慣。試想一下,在開發(fā)多窗體的應(yīng)用程序時(shí),若使用VisualStudio為我們自動(dòng)創(chuàng)建的名稱Form1、Form2、Form3等,將給開發(fā)團(tuán)隊(duì)的成員造成困擾。

2.在VS中創(chuàng)建Windows窗體的步驟

本任務(wù)共包含兩個(gè)窗體:一個(gè)是主窗體,由項(xiàng)目默認(rèn)創(chuàng)建;另一個(gè)是版權(quán)窗體,是項(xiàng)目的子窗體,由我們手動(dòng)創(chuàng)建。版權(quán)窗體創(chuàng)建方法如下:

(1)打開已有的項(xiàng)目,選擇“項(xiàng)目→添加Windows窗體”,或者單擊按鈕,彈出“添加新項(xiàng)”對話框,如圖1.9所示。

(2)選擇“Windows窗體”,輸入“名稱”,點(diǎn)擊“添加”按鈕,創(chuàng)建一個(gè)空白窗體。通過拖拽改變窗體大小,形成版權(quán)窗體,并將其命名為copyRightFrm。圖1.9

3.添加控件的方法

在窗體中添加控件的方法有兩種,第一種方法步驟如下:

(1)點(diǎn)擊工具箱中的工具。

(2)在窗體中需要添加工具的地方點(diǎn)擊,即添加標(biāo)準(zhǔn)大小的控件。若需要改變大小,則可以拖曳或在屬性窗口中修改size屬性。

另外,也可以按以下方法操作:

(1)點(diǎn)擊工具箱中的工具。

(2)在窗體中需要添加工具的地方拖動(dòng)到適當(dāng)?shù)拇笮 L砑雍每丶螅驮摓榭丶O(shè)置屬性和事件了。在設(shè)計(jì)器中用鼠標(biāo)選中控件,可以看到屬性窗口變?yōu)楫?dāng)前選中的控件的屬性,如圖1.10所示。

在圖1.10中,下拉框用于在不同控件間切換。4個(gè)圖標(biāo)按鈕分別是按分類排序、按字母排序、屬性和事件。屬性窗口中列出了所選控件的可用屬性。最下面是對選中屬性的文字說明。圖1.10是按照字母排序的屬性窗口;圖1.11是按照分類排序的事件窗口。圖1.10圖1.11

Name屬性和Text屬性有什么不同呢?

①?Name是控件的名稱,是控件在程序中的唯一標(biāo)識,它的命名必須遵循C#標(biāo)識符的命名規(guī)則(這將在下一個(gè)任務(wù)中詳細(xì)講解)。而且,在一個(gè)文件中,不能出現(xiàn)兩個(gè)名稱相同的控件。

②?Text是控件相關(guān)的文本,通常是在控件上顯示的字符串,如按鈕上的文本、窗體的標(biāo)題等。它可以是中文和特殊字符,可以重名。

4.添加事件——編寫代碼

(1)選中控件,將屬性窗口切換到事件窗口。

(2)找到事件名,在事件名右邊的空白處雙擊,VisualStudio從設(shè)計(jì)器自動(dòng)切換到代碼編輯器,并自動(dòng)生成事件處理函數(shù)的函數(shù)體。為方便查找,可以根據(jù)需要選擇適當(dāng)?shù)呐判蚍绞健?/p>

(3)每個(gè)控件都有一個(gè)默認(rèn)事件,按鈕和文本標(biāo)簽的默認(rèn)事件都是單擊事件,而窗體是載入事件。有興趣的讀者可以試一下。默認(rèn)事件通過雙擊控件生成。例如,我們要為“字體設(shè)為紅色”按鈕添加單擊事件,可以在事件窗體中找到“Click”,雙擊右邊空白進(jìn)入事件;也可以直接雙擊按鈕進(jìn)入。兩種方法是一樣的,都可自動(dòng)生成如下函數(shù)體:

privatevoidbtnFore_Click(objectsender,EventArgse)

{

}

當(dāng)用戶點(diǎn)擊該按鈕時(shí),執(zhí)行這對花括號里的代碼。我們看到,函數(shù)名由控件名和事件名組成,這樣既可以保證函數(shù)名不重復(fù),又可以使其一目了然。圖1.12除了屬性和事件外,成員還包含一些可用的函數(shù)。詳情可以查看幫助文檔。

這些事件的參數(shù)都是“objectsender,EventArgse”,它是什么意思呢?

objectsender和EventArgse及其處理方式,是Windows消息機(jī)制的另外一種表現(xiàn)。即我們的動(dòng)作被Windows捕獲,Windows把這個(gè)動(dòng)作作為系統(tǒng)消息發(fā)送給程序(通過message結(jié)構(gòu)),程序通過消息循環(huán)從自己的消息隊(duì)列中不斷地取出消息,并發(fā)送到窗口中尋找對應(yīng)的處理方式。例如,我們點(diǎn)擊了某個(gè)按鈕,我們的動(dòng)作,點(diǎn)擊的是哪個(gè)按鈕、如何點(diǎn)擊(單擊、右擊或雙擊)等就通過sender和e發(fā)送給窗口應(yīng)用程序,找到對應(yīng)的事件處理函數(shù)進(jìn)行處理。這時(shí)message結(jié)構(gòu)中的類似于sender和e的參數(shù)就起到了引導(dǎo)程序使用正確的處理函數(shù)的作用。

objectsender:發(fā)出事件的對象。程序根據(jù)sender引用控件。如果是按鈕button,則sender就是那個(gè)button。

System.EventArgse:對象中的數(shù)據(jù)。e是事件參數(shù)。在某些事件里,e用處不大;但在MouseEventArgs的Mouse事件中,e包括mouse的坐標(biāo)值e.X和e.Y。1.2.4代碼展示

應(yīng)用程序主、子窗體及Windows應(yīng)用程序的入口文件完整代碼如下(在“解決方案資源管理器”中雙擊mainFrm.cs就能看到主窗體對應(yīng)的代碼):

1usingSystem;

2usingSystem.Collections.Generic;

3usingSystem.ComponentModel;

4usingSystem.Data;

5usingSystem.Drawing;

6usingSystem.Text;

7usingSystem.Windows.Forms;

8namespaceFirstWindows

9{

10publicpartialclassmainFrm:Form

11{

12publicmainFrm()

13{

14InitializeComponent();

15}

16privatevoidbtnFore_Click(objectsender,EventArgse)

17{

18lblExp.ForeColor=Color.Red;

19}

20privatevoidbtnBack_Click(objectsender,EventArgse)

21{

22lblExp.BackColor=Color.Blue;

23}

24privatevoidmainFrm_MouseMove(objectsender,MouseEventArgse)

25{

26this.Text=string.Format("鼠標(biāo)當(dāng)前位置是:{0},{1}",e.X,e.Y);

27}

28privatevoidmainFrm_Load(objectsender,EventArgse)

29{

30this.Text="第一個(gè)Windows程序";

31this.TopMost=true;

32this.Hide();

33}

34privatevoidbtnSize_Click(objectsender,EventArgse)

35{

36Sizes=newSize(300,200);

37lblExp.Size=s;

38}

39}

40}代碼分析:

1~15系統(tǒng)自動(dòng)生成的代碼。

16~19 按鈕btnFore(字體設(shè)為紅色)的單擊事件處理函數(shù)。將文本標(biāo)簽lblExp的前景色(字體色)設(shè)為紅色。

20~23按鈕btnBack(背景設(shè)為藍(lán)色)的單擊事件處理函數(shù)。將文本標(biāo)簽lblExp的背景色設(shè)為藍(lán)色。

24~27 窗體mainFrm(主窗體)的鼠標(biāo)移動(dòng)事件處理函數(shù)。當(dāng)鼠標(biāo)在窗體上移動(dòng)時(shí)觸發(fā)。讀取事件參數(shù)e中的數(shù)據(jù)e.X和e.Y,把它們顯示到窗體的標(biāo)題上。this關(guān)鍵字表示當(dāng)前對象,這里是窗體。

28~33 窗體載入事件,該事件在窗體初始化時(shí)觸發(fā)。該事件是窗體的默認(rèn)事件,可以通過雙擊窗體空白處來生成。代碼設(shè)置窗體標(biāo)題文字,將窗體設(shè)為總在最前,并將窗體暫時(shí)隱藏。(因?yàn)槲覀円蕊@示版權(quán)窗體。)

34~38 按鈕btnSize(改變標(biāo)簽大小)的單擊事件處理函數(shù)。將文本標(biāo)簽lblExp的大小設(shè)為300?×?200像素。在“解決方案資源管理器”中雙擊copyRightFrm.cs,得到版權(quán)窗體對應(yīng)的代碼(以下代碼省去了前面和mainFrm一樣的using語句):

1namespaceFirstWindows

2{

3publicpartialclasscopyRightFrm:Form

4{

5publicintcount=0;

6publiccopyRightFrm()

7{

8InitializeComponent();

9}

10privatevoidcopyRightFrm_FormClosed(objectsender,FormClosedEventArgse)

11{

12count=1;

13}

14privatevoidcopyRightFrm_Load(objectsender,EventArgse)

15{

16label1.Text="CopyRight1.0\n\nByVicky";

17}

18}

19}代碼分析:

5 定義全局變量count并設(shè)初值為0。該變量的具體功能要和Program.cs文件結(jié)合起來看才能完整。

10~13 版權(quán)窗體的關(guān)閉事件處理函數(shù)。在版權(quán)窗體關(guān)閉時(shí)將全局變量count的值設(shè)為1。

14~17 版權(quán)窗體的載入事件處理函數(shù)。設(shè)置label1的文本。也可以直接在label1的屬性中設(shè)置,而不必寫代碼。這里是為了讓大家多練習(xí)、多接觸,才寫到事件里的。

Windows應(yīng)用程序的入口——Program.cs文件:

1usingSystem;

2usingSystem.Collections.Generic;

3usingSystem.Windows.Forms;

4namespaceFirstWindows

5{

6staticclassProgram

7{

8///<summary>

9///應(yīng)用程序的主入口點(diǎn)

10///</summary>

11[STAThread]

12staticvoidMain()

13{

14Application.EnableVisualStyles();

15Application.SetCompatibleTextRenderingDefault(false);

16copyRightFrmFrm_cr=newcopyRightFrm();

17Frm_cr.ShowDialog();

18if(Frm_cr.count==1)

19Application.Run(newForm1());

20}

21}

22}代碼分析:

16~19 我們添加的代碼,其余為VisualStudio自動(dòng)生成的,用于將程序運(yùn)行起來。

16 創(chuàng)建copyRightFrm的實(shí)例對象Frm_cr。

17 ShowDialog()以獨(dú)占方式顯示版權(quán)窗體Frm_cr。也就是說,版權(quán)窗體顯示的時(shí)候,相對項(xiàng)目而言是獨(dú)占的,必須關(guān)閉版權(quán)窗體后才能繼續(xù)處理項(xiàng)目的其它事務(wù)。

18判斷Frm_cr對象的count屬性是否為1,若為1,才執(zhí)行第19行代碼。在form2.cs中,我們看到了count值只有在窗體關(guān)閉時(shí),才能被處理函數(shù)改變?yōu)?。也就是說,只有版權(quán)窗體關(guān)閉了,才能往下執(zhí)行。此類用法通常也用在登錄窗體的獨(dú)占顯示等。關(guān)于此類判斷,我們將在后面的章節(jié)詳細(xì)介紹。

19初始化主窗體,使應(yīng)用程序真正運(yùn)行起來。 1.3任務(wù)三:在程序中使用數(shù)據(jù)

1.3.1功能描述

本任務(wù)通過一個(gè)基本的交互程序,將數(shù)據(jù)通過鍵盤輸入給程序,并在程序中做一定的轉(zhuǎn)換處理,最后將處理結(jié)果輸出到用戶屏幕。

通過本任務(wù),我們應(yīng)學(xué)會(huì):

與程序進(jìn)行交互;

在程序中使用變量和常量表示數(shù)據(jù);

在不同類型變量之間進(jìn)行轉(zhuǎn)換。1.3.2代碼展示

1usingSystem;

2usingSystem.Text;

3namespaceConsoleApplication1

4{

5classProgram

6{

7staticvoidMain(string[]args)

8{

9stringmyString;

10intmyInt;

11doublemyDouble,tempDouble;

12Console.Write("請輸入一行文本:");

13myString=Console.ReadLine();

14Console.WriteLine("您輸入了:\""+myString+"\"");

15Console.Write("請輸入一個(gè)整數(shù):");

16myInt=int.Parse(Console.ReadLine());

17Console.WriteLine("您輸入了:\""+myInt+"\"");

18Console.Write("請輸入一個(gè)小數(shù):");

19myDouble=double.Parse(Console.ReadLine());

20Console.WriteLine("您輸入了:\""+myDouble+"\"");

21tempDouble=myInt;

22Console.WriteLine(“將整數(shù)賦值給double變量后得到:\”“+

23tempDouble.ToString("0.0")+"\"");

24myInt=(int)myDouble;

25Console.WriteLine("將小數(shù)強(qiáng)制轉(zhuǎn)換成整數(shù)后:\""+myInt+"\"");

26Console.ReadLine();

27}

28}

29}代碼分析:

13 在用戶屏幕中,將鍵盤輸入的一行文本作為字符串保存到變量myString中。

14 回顯變量myString的值。

16~17 將終端輸入的字符串(同樣以回車結(jié)束)轉(zhuǎn)換成整數(shù)保存到變量myInt中,并回顯。

19~20 和16~17行的功能一樣,只是這里是double類型,即小數(shù)。

21 將整型變量myInt賦值給雙精度類型變量tempDouble,實(shí)現(xiàn)了變量間的隱式 轉(zhuǎn)換。

22 回顯tempDouble,在ToString()函數(shù)中加上參數(shù)“0.0”,表示小數(shù)部分即使為0也會(huì)顯示出來。

23 將雙精度類型變量myDouble強(qiáng)制轉(zhuǎn)換成整型變量myInt,強(qiáng)制轉(zhuǎn)換將丟失部分?jǐn)?shù)據(jù),如該語句將丟失小數(shù)部分。1.3.3知識點(diǎn)1——變量、常量和賦值

變量是數(shù)據(jù)的存儲位置,變量名就像門牌號一樣。我們可以把數(shù)據(jù)存放到變量中,也可以取出來作為C#表達(dá)式的一部分使用。

變量(variable)是用于保存數(shù)據(jù)的值的存儲單元的名稱。?變量的聲明告訴編譯器我們需要使用一個(gè)某種類型的值,編譯器就會(huì)為該值預(yù)留一塊足夠大的內(nèi)存空間,同時(shí)指明我們用來引用這個(gè)內(nèi)存單元的名稱(門牌號)。變量聲明的語法如下:

數(shù)據(jù)類型變量名;

如:intage;表示定義一個(gè)整型變量,名為age。

一個(gè)變量聲明可以在同一行上有多個(gè)相同類型的變量。該行上每個(gè)變量可以有初值,也可以沒有。

C#的數(shù)據(jù)類型將在1.3.5節(jié)詳細(xì)介紹。我們先來看一下變量的基本命名規(guī)則:

(1)變量名的第一個(gè)字符必須是字母、下劃線(_)或@。

(2)其后的字符可以是字母、下劃線或數(shù)字。

(3)不得使用系統(tǒng)標(biāo)準(zhǔn)標(biāo)識符(又稱關(guān)鍵字或保留字)。因?yàn)殛P(guān)鍵字對于C#編輯器而言有特定含義,如果將關(guān)鍵字定義為變量名,編譯器會(huì)出錯(cuò)(關(guān)鍵字在VisualStudio中默認(rèn)顯示為藍(lán)色)。例如下列變量名是合法的:

my88

HELLO

_cookies

而下列變量名不合法:

24LondonBridge//第一個(gè)字符不能是數(shù)字

waiting-for-you//使用非法符號橫杠“-”,若為下劃線 “_”則合法

namespace//使用了系統(tǒng)的名稱空間關(guān)鍵字 namespace另外,對于變量命名還有以下兩點(diǎn)建議:

(1)定義變量名時(shí)應(yīng)盡量做到“顧名思義”,如age、name、side等。盡量不要用難以理解的縮寫,比如用bc表示邊長,這樣不僅不利于別的程序員閱讀你的程序,一段時(shí)間后,連你自己都會(huì)很難理解這個(gè)變量的含義。

(2)對于簡單的關(guān)鍵字,一般使用全小寫字母組成的單詞表示,而對于較復(fù)雜的需要多個(gè)單詞表示的,每個(gè)單詞除第一個(gè)字母大寫外,其余的字母均小寫(第一個(gè)單詞的首字母也用小寫),如firstName、timeOfDeath等。1.3.4知識點(diǎn)2——交互式程序

我們通常需要程序在執(zhí)行時(shí)與用戶進(jìn)行交互,從用戶那里讀取數(shù)據(jù)。這樣我們的程序才能每次都根據(jù)用戶輸入的數(shù)據(jù)計(jì)算出不同的結(jié)果。

C#?的交互函數(shù)主要有兩種:Console.Read()和Console.ReadLine(),它們的功能都是從鍵盤讀入信息。唯一不同的是Read()方法用于獲得用戶輸入的任何值(可以是任何的字母或數(shù)字)的ASCII值;ReadLine()用于將獲得的數(shù)據(jù)保存在字符串變量之中。

ReadLine()方法獲得的字符串也可以轉(zhuǎn)換成其它數(shù)值類型,方法我們在本任務(wù)的程序代碼中就已經(jīng)接觸過了:

myInt=int.Parse(Console.ReadLine());

myDouble=double.Parse(Console.ReadLine());1.3.5知識點(diǎn)3——數(shù)據(jù)類型及轉(zhuǎn)換

變量中所存放的數(shù)據(jù)的含義是通過類型來控制的。C#提供一套預(yù)定義的結(jié)構(gòu)類型,稱做簡單類型。簡單類型用保留字定義,這些保留字僅僅是在System名字空間里預(yù)定義的結(jié)構(gòu)類型的化名。比如int是保留字,System.Int32是在System名稱空間中預(yù)定義的類型。一個(gè)簡單類型和它化名的結(jié)構(gòu)類型是完全一樣的。也就是說,寫int和寫System.Int32是一樣的。簡單類型關(guān)鍵字的首字符是小寫,如char;名稱空間中的化名一般為大寫,如Char。關(guān)于類型符和名稱空間的關(guān)系,在本學(xué)習(xí)情境中,讀者可以先不必深究。

簡單類型主要有整型、浮點(diǎn)型、小數(shù)型、布爾型和字符型等。

1.數(shù)值數(shù)據(jù)類型

C#中有三種數(shù)值類型:整型、浮點(diǎn)型和小數(shù)型。其中整型8種:sbyte、byte、short、ushort、int、uint、long和ulong。浮點(diǎn)型2種:float和double。float精確到小數(shù)點(diǎn)后面7位,double精確到小數(shù)點(diǎn)后面15位或16位。小數(shù)型decimal非常適用于金融和貨幣運(yùn)算,精確到小數(shù)點(diǎn)后面28位。數(shù)值類型如表1.3所示。

char類型代表無符號的16位整數(shù),其數(shù)值范圍為0~65?535。char類型的可能值對應(yīng)于統(tǒng)一字符編碼標(biāo)準(zhǔn)(Unicode)的字符集,其賦值形式有三種:

charchsomechar=‘A’;

charchsomechar=‘\x0065’; //十六進(jìn)制

charchsomechar='\u0065'; //Unicode表示法

char類型與其它整數(shù)類型相比有以下兩點(diǎn)不同之處:

(1)沒有其它類型到char類型的隱式轉(zhuǎn)換,即使是對于sbyte、byte和ushort這樣能完全使用char類型代表其值的類型,sbyte、byte和ushort到char的隱式轉(zhuǎn)換也不存在。

(2)?char類型的常量必須被寫為字符形式,如果用整數(shù)形式,則必須帶有類型轉(zhuǎn)換前綴。比如(char)65,將整數(shù)65強(qiáng)制轉(zhuǎn)換為字符型,即?'A'。

2.布爾型——值為true或false

可能有些讀者學(xué)過C或C++,知道在它們的布爾類型中,非零的整數(shù)值可以代替true。但C#語言擯棄了這種做法,也就是說,在C#語言中,bool數(shù)據(jù)類型只能有true(真)或false(假)兩種取值。整數(shù)類型和布爾類型不能進(jìn)行轉(zhuǎn)換操作。

布爾數(shù)據(jù)類型的聲明格式如下:

布爾類型關(guān)鍵字變量名

例如:

boolis_adult;

boolinWord=true;

boolcanFly=false;

3.類型轉(zhuǎn)換

類型轉(zhuǎn)換分為隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換兩種。

(1)隱式類型轉(zhuǎn)換通過賦值實(shí)現(xiàn)。例如,將一個(gè)整型數(shù)值賦值給一個(gè)雙精度類型變量:doubled=2;賦值時(shí)2被隱式轉(zhuǎn)換為2.0再存放到變量d中。

(2)顯式類型轉(zhuǎn)換也稱為強(qiáng)制類型轉(zhuǎn)換,用括號加類型名實(shí)現(xiàn)。例如:已有一個(gè)整型變量inti;要將雙精度類型變量myDouble中的值轉(zhuǎn)換為整數(shù)并存放到i中,表達(dá)式為:i=(int)myDouble。

注意:強(qiáng)制類型轉(zhuǎn)換可能丟失部分?jǐn)?shù)據(jù),所以進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)應(yīng)細(xì)心慎重。 1.4任務(wù)四:讓程序?yàn)槲覀冇?jì)算

1.4.1功能描述

本任務(wù)通過一個(gè)基本的數(shù)據(jù)處理程序,定義若干個(gè)變量,進(jìn)行算術(shù)、關(guān)系和邏輯運(yùn)算,最后將運(yùn)算結(jié)果輸出到用戶屏幕。

通過本任務(wù),我們應(yīng)學(xué)會(huì):

進(jìn)行基本的算術(shù)、關(guān)系和邏輯運(yùn)算;

在程序中使用復(fù)雜的表達(dá)式。1.4.2代碼展示

由于本程序代碼比較簡明,不再一一詳解。請讀者自行通過注釋理解。

1usingSystem;

2namespaceexpression

3{

4classProgram

5{

6staticvoidMain(string[]args)

7{

8inta=5+4;//a=9

9intb=a*2;//b=18

10intc=b/4;//c=4

11Console.WriteLine("a="+a+"b="+b+"c="+c);

12intd=b-c;//d=14

13inte=-d;//e=-14

14intf=e%4;//f=-2

15Console.WriteLine("d="+d+"e="+e+"f="+f);

16doubleg=18.4;

17doubleh=g%4;//h=2.4

18Console.WriteLine("g="+g+"h="+h);

19inti=3;

20intj=i++;//i=4,j=3

21intk=++i;//i=5,k=5

22Console.WriteLine("i="+i+"j="+j+"k="+k);

23Console.WriteLine("a>bis"+(a>b));

24Console.WriteLine("d==eis"+(d==e));

25Console.WriteLine("a<=bandj!=k

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論