




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《2025歐元借款合同》
- 2025版權(quán)轉(zhuǎn)讓合同范文模板
- 2025《合同管理與招投標(biāo)操作》課程標(biāo)準(zhǔn)
- 2025通信設(shè)備安裝與維護(hù)合同
- 庫房房屋租賃合同
- 聯(lián)合舉辦成人高等教育合同
- 2025年昆明茶葉生產(chǎn)收購合同
- 地下車庫車位轉(zhuǎn)讓買賣合同
- 飾品品牌加盟協(xié)議品牌推廣
- 債務(wù)歸夫妻一方婚內(nèi)財(cái)產(chǎn)協(xié)議書范本
- 2025陜西核工業(yè)工程勘察院有限公司招聘(21人)筆試參考題庫附帶答案詳解
- 2025年山東、湖北部分重點(diǎn)中學(xué)高中畢業(yè)班第二次模擬考試數(shù)學(xué)試題含解析
- 8.2 誠信經(jīng)營 依法納稅課件-高中政治統(tǒng)編版選擇性必修二法律與生活
- 2025年超高功率大噸位電弧爐項(xiàng)目發(fā)展計(jì)劃
- DB32T 5076-2025 奶牛規(guī)模化養(yǎng)殖設(shè)施設(shè)備配置技術(shù)規(guī)范
- 2024年四川省高等職業(yè)教育單獨(dú)考試招生文化素質(zhì)考試中職英語試卷
- 人教A版必修第二冊高一(下)數(shù)學(xué)6.3.2-6.3.3平面向量正交分解及坐標(biāo)表示【課件】
- 高速公路修補(bǔ)合同協(xié)議
- 航空業(yè)勞動(dòng)力安全保障措施
- 《OCR技術(shù)及其應(yīng)用》課件
- 2025年內(nèi)科主治醫(yī)師考試消化內(nèi)科
評論
0/150
提交評論