《C#程序設(shè)計基礎(chǔ)教程》課件第4章_第1頁
《C#程序設(shè)計基礎(chǔ)教程》課件第4章_第2頁
《C#程序設(shè)計基礎(chǔ)教程》課件第4章_第3頁
《C#程序設(shè)計基礎(chǔ)教程》課件第4章_第4頁
《C#程序設(shè)計基礎(chǔ)教程》課件第4章_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章WinForm基礎(chǔ)(一)4.1窗體4.2控件4.3用戶登錄4.4搖獎機

4.1窗體

自從圖形界面出現(xiàn)后,窗體就成為了應(yīng)用程序的一個重要組成部分,現(xiàn)如今在幾乎所有的Windows應(yīng)用程序的制作過程中,窗體的制作是最主要的工作之一。4.1.1創(chuàng)建WinForm應(yīng)用程序創(chuàng)建WinForm應(yīng)用程序的過程和創(chuàng)建控制臺應(yīng)用程序基本一樣,只是模板選用的是“Windows窗體應(yīng)用程序”。創(chuàng)建成功的WinForm應(yīng)用程序默認已經(jīng)有了一個名為Form1的窗體,如圖4-2所示。這個時候程序已經(jīng)可以運行了,當(dāng)然現(xiàn)在的運行結(jié)果是很令人失望的,因為只有一個沒有任何內(nèi)容的窗體,要想制作出精美的Windows窗體,我們還需要學(xué)習(xí)很多內(nèi)容。4.1.2認識窗體窗體是Windows應(yīng)用程序的基礎(chǔ),所有內(nèi)容必須依托于窗體才能夠完整地呈現(xiàn)出來,因此我們首先需要認識一下窗體。在WinForm中,一個完整的窗體是由兩個文件構(gòu)成的:一個窗體的cs文件以及一個對應(yīng)的Designer.cs文件。這兩個文件都包含一個名為Form1的類。同時在class關(guān)鍵字前還有一個關(guān)鍵字partial。partial的意思是“部分的”,也就是說這兩個類實際上是同一個類,只不過分成兩個部分來寫。事實上,在窗體的制作過程中,有些工作是需要我們來完成的,但是有些工作是需要系統(tǒng)幫助我們來完成的,為了更好地組織代碼,VS2010就將系統(tǒng)自動添加的代碼放在了Designer.cs文件中,而我們所寫的代碼則放在了窗體的cs文件中。另外,在Form1.cs中我們還會發(fā)現(xiàn)這樣一個奇怪的結(jié)構(gòu):publicpartialclassForm1:Form這個我們稱之為“繼承”,簡單來說就是將別人做好的東西拿來使用一下。剛才我們提到的,窗體的創(chuàng)建實際上是一個很復(fù)雜的過程,因為需要告訴操作系統(tǒng)窗體的許多信息,然后操作系統(tǒng)再根據(jù)這些信息在屏幕上“畫”出我們所要的窗體,這中間的很多工作Microsoft的工程師已經(jīng)幫我們做好了,我們只需要通過“繼承”調(diào)用即可。4.1.3常用屬性認識了窗體文件后我們就可以來具體地設(shè)計我們的窗體了。在VS2010中選中窗體,即可在屬性窗口中查看窗體的常用屬性,如圖4-3所示。在屬性窗體中,系統(tǒng)分門別類地列出了窗體的各種屬性,當(dāng)我們選中其中的某個屬性的時候,可以在屬性窗體的底部看到關(guān)于該屬性的簡要說明。窗體的屬性有很多,表4-1列出了一些常用的屬性。4.1.4常用方法除了屬性,窗體也包含很多方法,表4-2列出了窗體的常用方法及其說明。4.1.5常用事件在前面我們曾經(jīng)講過對象還有一個要素就是事件,事件告訴我們對象能夠?qū)δ男﹦幼骰蛐袨樽龀鲰憫?yīng)。表4-3列出了窗體的常用事件及其作用。

4.2控件

Windows應(yīng)用程序中另一個重要的組成部分就是各種控件,事實上窗體是應(yīng)用程序的載體,而真正實現(xiàn)功能就要通過各種不同的控件來實現(xiàn)。在WinForm中,系統(tǒng)為我們提供了大量控件,這些控件的外觀和功能各不相同,學(xué)習(xí)和使用這些控件是WinForm編程的基礎(chǔ)。4.2.1Label標(biāo)簽(Label)控件一般用于給用戶提供描述性文本。大部分情況下,標(biāo)簽控件都會和其他控件一起出現(xiàn),用來為用戶提供相應(yīng)的說明信息。對于用戶來說,標(biāo)簽控件的信息是只讀的,但是我們可以通過代碼修改其Text屬性來修改這些信息:Label1.Text="HelloWorld!";除了這個屬性之外,標(biāo)簽控件還有另外的幾個常用屬性:AutoSize:是否可以手動調(diào)整標(biāo)簽的大小。默認情況下,標(biāo)簽的大小會自動根據(jù)其內(nèi)容而變化。Name:獲取或設(shè)置標(biāo)簽對象的名稱。標(biāo)簽控件在命名時使用lbl前綴,如lblName等。BackColor:獲取或設(shè)置標(biāo)簽的背景顏色。Font:獲取或設(shè)置標(biāo)簽的文本字體。ForceColor:獲取或設(shè)置標(biāo)簽文本的字體顏色。標(biāo)簽控件也有很多方法,但是一般情況下因為用戶不能操作標(biāo)簽控件,所以很少用到這些方法。事件中最常用的是Click事件,即標(biāo)簽被單擊時觸發(fā)的事件。4.2.2TextBox和RichTextBox在絕大多數(shù)的管理信息系統(tǒng)(ManagementInformationSystem,MIS)中,開發(fā)人員面對的首要問題就是采集用戶的信息,大多數(shù)情況下是讓用戶自己來輸入,能完成這個任務(wù)的有兩個控件:TextBox和RichTextBox。TextBox控件是一個基本的輸入控件,如圖4-5所示。默認情況下,TextBox控件只能接受單行信息的輸入,并且最大可以接收32767個字符,可以通過其MaxLength屬性來限制用戶輸入的字符數(shù)量。如果用戶需要輸入大量的信息,這時可以將TextBox控件的MultiLine屬性設(shè)置為true,這樣我們就可以通過鼠標(biāo)拖動來得到一個更大的可以多行輸入的文本框,并且通過ScrollBars屬性來設(shè)置滾動條,如圖4-6所示。還有一種情況是用戶輸入的信息是保密的,如銀行的密碼等,這個時候我們就可以通過TextBox控件的PasswordChar屬性來設(shè)置輸入內(nèi)容的掩碼。TextBox控件作為一個基本的信息輸入控件可以勝任大多數(shù)信息采集任務(wù),但是仍然會有一些特殊的情況下無法使用它,例如用戶輸入的信息量非常大而且文字當(dāng)中還包含有各種制表符和樣式信息,這個時候TextBox控件就無能為力了,我們就只有采用第二個類似的控件RichTextBox。RichTextBox控件是一個功能更加強大的文本輸入控件,它默認就是多行的,而且最大可以接收2147483647個字符,包括各種制表符,甚至可以包含圖片,但是它無法實現(xiàn)密碼輸入的效果。4.2.3Button當(dāng)用戶完成信息錄入后,就需要給系統(tǒng)一個信號,讓它來處理這些信息,這個工作大多數(shù)時候是交給命令按鈕(Button)來完成的。Button最常見的用法是通過其Text屬性設(shè)置明確的命令名稱,當(dāng)用戶點擊Button控件后,通過事件處理程序的代碼來完成相應(yīng)的命令。除了Text屬性外,Button控件還有另外幾個常用屬性:Name:獲取或設(shè)置按鈕對象的名稱。按鈕對象在命名時使用btn前綴,如btnSave等。Font:獲取或設(shè)置按鈕的文本字體。ForeColor:獲取或設(shè)置按鈕文本的字體顏色。Image:獲取或設(shè)置顯示在按鈕控件上的圖像。Button控件包含很多方法,常用的是Focue()方法,即為Button控件設(shè)置輸入焦點。事件中最常用的是Click事件,即按鈕被單擊時所觸發(fā)的事件。4.2.4PictureBoxPictureBox控件用于顯示圖像,圖像可以是BMP、JPEG、GJF、PNG、元文件或圖標(biāo)。PictureBox控件本身比較簡單,屬性也比較少,常用的有以下幾個:Name:在代碼中用來標(biāo)識控件的名稱,其前綴采用pic。Image:在控件中顯示的圖像。可以通過一個對話框選擇圖片,亦可以通過代碼來實現(xiàn):picStart.Image=Image.FromFile("C:\\1.jpg");其中Image是C#中操作圖像的類,F(xiàn)romFile()方法用來加載圖片文件,其需要提供圖片文件的路徑作為參數(shù)。SizeMode:控制PictureBox將如何處理圖片位置和控件大小。它有幾個固定的取值:Normal:圖像被置于PictureBox的左上角。如果圖像比包含它的PictureBox大,則該圖像將被裁剪掉。StretchImage:PictureBox中的圖像被拉伸或收縮,以適應(yīng)PictureBox的大小。AutoSize:調(diào)整PictureBox大小,使其等于所包含的圖像大小。CenterImage:如果PictureBox比圖像大,則圖像將居中顯示;如果圖像比PictureBox大,則圖像將居于PictureBox中心,而外邊緣將被裁剪掉。Zoom:圖像大小按其原有的大小比例被增加或減小。PictureBox控件沒有常用的方法,事件中的單擊事件Click用得比較多。4.2.5TimerTimer可以實現(xiàn)按自定義時間間隔來引發(fā)事件。Timer的屬性非常少,常用的只有三個:Name:在代碼中用來標(biāo)識控件的名稱,Timer控件一般不需要該名稱。Enabled:時鐘的開關(guān),當(dāng)設(shè)置為true時,時鐘就開始工作。Interval:時鐘工作的時間間隔,也就是隔多長時間時鐘觸發(fā)一次,其單位是毫秒,例如將其設(shè)置為1000,則時鐘就會每秒觸發(fā)一次事件。Timer控件沒有常用的方法,事件只有一個—Tick,即每個時間間隔所觸發(fā)的事件。我們可以在這個事件中通過代碼告訴時鐘需要做什么事情:privatevoidtimer1_Tick(objectsender,EventArgse){lblNum1.Text=r.Next(0,10).ToString();}

4.3用戶登錄

4.3.1問題在大部分的MIS系統(tǒng)中,用戶在使用之前都需要先完成登錄操作,這個過程并不復(fù)雜。我們需要提供一個窗體,供用戶輸入其用戶名和密碼,然后對用戶輸入的信息進行驗證。窗體看起來比較簡單,其具體需求如下:(1)窗體運行時要處于屏幕的中央,并且不能夠被最大化和最小化,也不能夠改變大小。(2)用戶名和密碼的長度限制在8位以內(nèi)。(3)點擊“登錄”按鈕或按下“Enter”鍵后開始登錄驗證。(4)點擊“取消”按鈕或按下“Esc”鍵后退出。4.3.2需求分析打開剛創(chuàng)建的Windows項目CH05,根據(jù)需求在窗體上放置兩個標(biāo)簽、兩個文本框和兩個按鈕,接下來完成各項需求。1.控件設(shè)置首先將控件按照界面要求排布好位置,然后開始設(shè)置它們的各項屬性。對于標(biāo)簽和按鈕來說,我們只需要設(shè)置其Name屬性和Text屬性,文本框除了這兩個屬性外還有MaxLength屬性和PasswordChar屬性需要設(shè)置,具體設(shè)置如表4-4所示。2.窗體設(shè)置對于窗體,我們需要滿足的要求比較多,相應(yīng)的屬性設(shè)置也比較多。首先,窗體運行時要求在屏幕的中央,我們可以通過StartPosition屬性來設(shè)定,其作用是設(shè)置窗體的起始位置,它有5個取值,如表4-5所示。我們選擇將StartPosition屬性設(shè)定為CenterScreen,這樣窗體運行的時候就會處于屏幕的中央,如圖4-11所示。窗體的最大化和最小化是通過MaximizeBox屬性和MinimizeBox屬性設(shè)定的,這兩個都是布爾類型的屬性,默認為True,即窗體顯示最大化和最小化按鈕,如果設(shè)定為False,則窗體上的最大化和最小化按鈕就不會顯示出來,窗體也就無法被最大化和最小化,如圖4-12所示。如果想設(shè)置窗體無法改變大小,可以通過FormBorderStyle屬性設(shè)定,該屬性的作用是獲取或設(shè)置窗體的邊框樣式,它有7個取值,如表4-6所示。最后兩個要求的實現(xiàn)是在按鈕的事件中完成的,但是可以通過屬性將按鈕和窗體關(guān)聯(lián)起來,這樣就可以實現(xiàn)按下“Enter”鍵后開始登錄驗證以及按下“Esc”鍵后退出,關(guān)聯(lián)的方式是通過AcceptButton和CancelButton兩個窗體屬性來完成的。前者用來獲取或設(shè)置當(dāng)用戶按“Enter”鍵時所單擊的窗體上的按鈕,這里很自然設(shè)定為“登錄”按鈕。后者則是用來獲取或設(shè)置當(dāng)用戶按“Esc”鍵時單擊的按鈕控件,這里設(shè)定為“取消”按鈕。另外,不要忘記將Text屬性設(shè)置為“用戶登錄”。3.事件設(shè)置前面我們提到過,WinForm編程是事件驅(qū)動的,也就是說在編寫程序的時候,我們大部分工作就是在控件的特定事件中編寫處理程序,并觀察是否能夠滿足用戶的需求。例如,我們在“登錄”按鈕的Click事件中編寫用戶身份驗證的處理程序,然后運行程序看是否能夠?qū)崿F(xiàn)該功能。這里面就有兩個要點:合適的控件以及合適的事件。在WinForm中,每一個對象都有很多不同的事件,但并不是每一個事件我們都會用到,事實上我們常用的事件很有限。打開事件處理程序代碼的方式有兩種:在開發(fā)界面中雙擊對象或者在對象事件列表中雙擊事件。雙擊對象打開的是該對象的默認事件,在WinForm中基本上每一個對象都有一個默認事件,也是我們最常用的事件。例如,按鈕的默認事件是Click,雙擊按鈕就會打開其Click事件處理程序。通過對象事件列表打開事件處理程序主要用于對象的非默認事件,方式并不復(fù)雜:首先找到要處理的事件,在其屬性窗口中點擊閃電圖標(biāo),就可以看到該控件的事件列表。無論采用哪種方式,我們都會來到窗體的代碼編寫視圖。例如,我們雙擊“登錄”按鈕后就會看到其代碼設(shè)計視圖,如圖4-15所示。圖4-15中矩形框部分就是系統(tǒng)自動創(chuàng)建的登錄按鈕Click事件的處理程序,在這里我們可以編寫代碼告訴系統(tǒng)如何處理這個事件。聯(lián)系到前面我們學(xué)習(xí)到的內(nèi)容會發(fā)現(xiàn),事件處理程序其實就是窗體類中的一個私有方法,只不過這個方法是系統(tǒng)自動生成的。在這個方法中,方法的命名是對象名稱_事件名稱,這里我們可以看到方法名稱是btnLogin_Click。參數(shù)有兩個:第一個object類型的sender就是對事件源對象的引用,例如這里sender指的就是“登錄”按鈕;第二個EventArgs類型的參數(shù)e就是對事件參數(shù)的引用,這里e就是Click事件的參數(shù)。我們可以在這個方法中編寫代碼來完成對用戶點擊“登錄”按鈕這個動作的響應(yīng):privatevoidbtnLogin_Click(objectsender,EventArgse){if((txtUID.Text=="admin")&&(txtPwd.Text=="123")){lblMsg.Text="登錄成功!";lblMsg.BackColor=Color.Blue;}else{lblMsg.Text="登錄失??!";lblMsg.BackColor=Color.Red;}}在上面的代碼中,我們設(shè)定用戶名是“admin”,密碼是“123”。如果用戶的輸入是正確的,那么就會在一個標(biāo)簽中顯示“登錄成功!”,并將標(biāo)簽的背景顏色改為藍色;如果用戶的輸入不正確,則顯示“登錄失??!”,并將標(biāo)簽的背景顏色改為紅色。這里Color是C#中用來定義和使用顏色的對象,我們可以通過其屬性來獲取系統(tǒng)定義的各種顏色。其運行效果如圖4-16所示。事實上,事件可以看做是對象之間的互動。例如,對象A做出了一些動作或行為,這些動作或行為就會影響到對象B,這時對象B就會做出響應(yīng)。在這個過程中對象B需要知道是誰做出了這些動作或行為,也就是上面提到的sender參數(shù),另外還要知道這些動作或行為傳遞了什么信息,也就是e這個參數(shù),這樣對象B才能夠根據(jù)這些做出響應(yīng)。4.3.3實現(xiàn)用戶登錄在完成了以上的需求分析后我們就可以實現(xiàn)登錄窗體了:publicpartialclassfrmLogin:Form{

publicfrmLogin(){InitializeComponent();}//窗體加載privatevoidfrmLogin_Load(objectsender,EventArgse){lblMsg.Text="";}privatevoidbtnLogin_Click(objectsender,EventArgse){if((txtUID.Text=="admin")&&(txtPwd.Text=="123")){lblMsg.Text="登錄成功!";lblMsg.BackColor=Color.Blue;

}else{lblMsg.Text="登錄失??!";lblMsg.BackColor=Color.Red;}}privatevoidbtnCancel_Click(objectsender,EventArgse){Application.Exit();}}在上面的代碼中,我們在窗體的Load事件中完成了對消息標(biāo)簽的初始化,因為剛運行不需要顯示任何信息,因此我們將其Text屬性設(shè)置為空。在“登錄”按鈕的Click事件中,我們完成了對用戶信息的驗證,在“取消”按鈕的Click事件中只有一行代碼,即退出系統(tǒng)。這里我們用到了Application類,它提供了很多方法,其作用就是管理我們的應(yīng)用程序,Exit()方法即退出系統(tǒng)。

4.4搖獎機

4.4.1問題某商場打算舉行一個有獎促銷活動,凡是在商場消費超過300元的顧客都會得到一張獎票,每個整點商場都會進行抽獎,抽中的顧客可以得到相應(yīng)的獎品。為了方便,商場委托我們制作一個自動搖獎的小程序,能夠自動地隨機產(chǎn)生一個6位中獎號碼,其運行效果如圖4-17所示。整個搖獎機的具體需求如下:(1)界面要夠“炫”,因此不能采用普通的窗體。(2)整個搖獎的過程要盡可能簡單,以杜絕作弊。(3)顏色要鮮艷、醒目。(4)搖獎的結(jié)果應(yīng)是隨機的,不能有人為操作的痕跡。4.4.2需求分析接下來我們就來仔細地分析一下?lián)u獎機的各項要求。1.不規(guī)則窗體制作仔細觀察圖4-17所示的搖獎機的界面,我們發(fā)現(xiàn)這不是一個一般意義上的窗體,因為它沒有邊界,而且外形也不是傳統(tǒng)的四四方方的樣子,這種窗體我們稱為不規(guī)則窗體。它看起來雖然很“炫”,但是制作起來并不復(fù)雜。首先,我們需要準(zhǔn)備一張bmp格式的圖片,而且最好是色彩反差比較大的那種,這樣在進行鏤空的時候才能夠使邊界顯得清晰,否則就會出現(xiàn)有“毛刺”的邊界。然后,找到窗體的BackgroundImage屬性。在WinForm中,系統(tǒng)用到的圖片可以有兩個來源:資源文件或本地系統(tǒng)導(dǎo)入。由于這里項目的資源文件是空的,因此我們選擇本地系統(tǒng)導(dǎo)入這種方式來將剛才的圖片設(shè)置為窗體的背景圖片,如圖4-19所示。點擊“導(dǎo)入(M)…”按鈕就可以打開圖片選擇對話框,選中我們剛才準(zhǔn)備的圖片,然后點擊“打開(O)”按鈕,如圖4-20所示。這時在剛才選擇資源的窗體右側(cè)就可以看到我們選擇的圖片已經(jīng)被加入到系統(tǒng)資源中了,點擊“確定”按鈕完成窗體背景圖片的設(shè)置,調(diào)整窗體的大小以更好地展示圖片,如圖4-21所示。這時如果運行程序我們會發(fā)現(xiàn)效果非常不好,根本就沒有任何鏤空效果出現(xiàn),接下來我們還需要進一步的加工。在窗體的屬性窗口中找到TransparencyKey屬性,將其設(shè)置為圖片的背景顏色。此時再次運行程序,窗體鏤空效果就可以實現(xiàn)了。這個過程中最為重要的就是圖片的色彩了,最好使用純色作為背景顏色的圖片,而且背景顏色和其他部分的色彩反差越大越好,這樣鏤空出來的效果才能夠做到最佳。最后將窗體的FormBorderStyle屬性設(shè)置為None即可。2.鼠標(biāo)拖動窗體在Windows中,移動窗體一般是通過鼠標(biāo)拖動窗體的標(biāo)題欄部分來實現(xiàn)的,但是我們的不規(guī)則窗體沒有標(biāo)題欄,這時候我們就只有采用第二種方式,即通過鼠標(biāo)拖動窗體來實現(xiàn)窗體的移動。當(dāng)然這種方式實現(xiàn)起來有些復(fù)雜,因為要運用一些簡單的幾何知識。我們知道,在一個平面中確定一個點的位置通常情況下是需要有一個坐標(biāo)系,找到坐標(biāo)原點并設(shè)置X軸和Y軸,這樣就可以通過P(10,20)這種方式來說明一個點的位置。當(dāng)這個點發(fā)生移動的時候,我們就需要知道它在X軸方向和Y軸方向上的移動量,然后通過簡單的運算就可以知道這個點的新位置了。例如,點P在X軸方向上移動了10個單位,在Y軸方向上移動了-5個單位,那么點P的新位置就是P(10+10,20-5)=P(20,15)。在這個運算過程中我們需要知道的就是三個信息:點P的原始坐標(biāo)、點P在X軸方向上的移動量和在Y軸方向上的移動量。在Windows中,屏幕的左頂點就是坐標(biāo)的原點,而窗體的位置就是由其左頂點的坐標(biāo)來決定的,這個坐標(biāo)可以通過窗體的Location屬性得到:Pointp=this.Location;同樣的原理,通過修改這個屬性我們就可以改變窗體在屏幕上的位置:this.Location=newPoint(p.X+100,p.Y-200);也就是說,通過鼠標(biāo)拖動窗體的第一個重要信息我們已經(jīng)獲得了,那么如何確定窗體的移動量呢?這時候我們就需要第二個重要的幫手,即鼠標(biāo)。事實上,在鼠標(biāo)拖動窗體的過程中,窗體的移動量和鼠標(biāo)的移動量是相等的,因此我們只需要計算出鼠標(biāo)的移動量就可以得到窗體的移動量了。如何計算鼠標(biāo)的移動量呢?通過前面的學(xué)習(xí)我們知道,將點P前后兩個坐標(biāo)進行簡單的減法運算就可以得到點P的移動量了,因此如果我們將鼠標(biāo)移動前后的坐標(biāo)相減就可以得到鼠標(biāo)的移動量了,也就是窗體的移動量。系統(tǒng)提供的MousePosition可以幫助我們完成這個工作。這樣我們就獲得了所有的信息。接下來是整理用戶的操作過程。整個操作過程應(yīng)該是這樣的:當(dāng)用戶在窗體的任意位置單擊時,我們就將窗體當(dāng)前的位置和鼠標(biāo)的當(dāng)前位置記錄下來:formOld=this.Location;mouseOld=MousePosition;當(dāng)用戶移動鼠標(biāo)的時候,我們就通過鼠標(biāo)的移動量來重新計算窗體的位置,這樣窗體就可以隨著鼠標(biāo)一起移動了:PointmouseNew=MousePosition;intmoveX=mouseNew.X-mouseOld.X;intmoveY=mouseNew.Y-mouseOld.Y;this.Location=newPoint(formOld.X+moveX,formOld.Y+moveY);最后還有兩個地方需要注意。首先就是鼠標(biāo)的原坐標(biāo)和窗體的原坐標(biāo)需要聲明成為全局變量,因為要在整個窗體的兩個不同的事件中用到這兩個變量:publicpartialclassForm1:Form{privatePointmouseOld;privatePointformOld; …}這兩個變量都是Point類型的,這是C#中的一個結(jié)構(gòu)體,用來描述“點”對象。另外,我們用到的兩個窗體事件分別是MouseDowm和MouseMove。MouseDowm是當(dāng)鼠標(biāo)按鍵按下時觸發(fā)的。制作事件處理程序的過程非常簡單,首先選中界面中需要操作的控件,然后在屬性窗口中點擊閃電圖標(biāo),就可以看到該控件的事件列表。在事件列表中選中相應(yīng)的事件后雙擊就可以打開事件處理的代碼:privatevoidForm1_MouseDown(objectsender,MouseEventArgse){//取得窗體和鼠標(biāo)的原坐標(biāo)}在這個事件處理程序中,方法的名稱及其參數(shù)是系統(tǒng)自動生成的,不需要我們做修改,因此事件處理程序我們只需要關(guān)心方法內(nèi)的代碼就可以了。MouseMove是當(dāng)鼠標(biāo)在窗體上移動的時候觸發(fā)的,在這個事件中我們要對鼠標(biāo)的按鍵做一個判斷,只有鼠標(biāo)按下的是左鍵的時候才做處理:privatevoidForm1_MouseMove(objectsender,MouseEventArgse){if(e.Button==System.Windows.Forms.MouseButtons.Left){//處理窗體移動}}這里我們用到了事件參數(shù)e。事實上,所有的系統(tǒng)事件基本上都帶有兩個參數(shù):sender和e。object類型參數(shù)sender是事件引發(fā)者的引用,例如這里就是指窗體對象。參數(shù)e就是事件本身的引用,一般情況下系統(tǒng)會通過e這個參數(shù)來傳遞一些系統(tǒng)信息,例如這里就可以通過e得到鼠標(biāo)的按鍵信息。3.隨機產(chǎn)生數(shù)字在這里的搖獎機中,我們需要將隨機數(shù)的范圍設(shè)置為0~9,并且在Timer控件的Tick事件中完成隨機數(shù)字的生成,然后將結(jié)果放置在標(biāo)簽控件的Text屬性上:privatevoidtimer1_Tick(objectsender,EventArgse){lblNum1.Text=r.Next(0,10).ToString();lblNum2.Text=r.Next(0,10).ToString();lblNum3.Text=r.Next(0,10).ToString();lblNum4.Text=r.Next(0,10).ToString();lblNum5.Text=r.Next(0,10).ToString();lblNum6.Text=r.Next(0,10).ToString();}4.開始和結(jié)束通過用戶提供的搖獎機的界面我們發(fā)現(xiàn)沒有開始和結(jié)束按鈕,如果添加這兩個按鈕又會破壞界面,因此我們通過兩個PictureBox控件,將界面上的兩個部分“偷梁換柱”成為兩個控制按鈕,如圖4-25所示。兩個PictureBox控件使用同樣的圖片,SizeMode全部設(shè)置為AutoSize,然后在它們的Click事件中完成對Timer控件的開關(guān)操作://打開時鐘privatevoidpicStart_Click(objectsender,EventArgse){timer1.Enabled=true;}//關(guān)閉時鐘privatevoidpicStop_Click(objectsender,EventArgse){timer1.Enabled=false;}4.4.3實現(xiàn)搖獎機在完成了上面的需求分析后,我們就可以完成搖獎機的制作了:publicpartialclassfrmExample01:Form{privatePointmouseOld; //鼠標(biāo)舊坐標(biāo)privatePointformOld; //窗體舊坐標(biāo)privateRandomr; //隨機數(shù)對象publicfrmExample01(){InitializeComponent();}//窗體加載:完成隨機數(shù)對象的實例化privatevoidfrmExample01_Load(objectsender,EventArgse){r=newRandom();}//鼠標(biāo)按下事件:記錄鼠標(biāo)和窗體的舊坐標(biāo)privatevoidForm1_MouseDown(objectsender,MouseEventArgse){formOld=this.Location;

溫馨提示

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

評論

0/150

提交評論