版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章WinForms基礎(chǔ)知識(shí)5.1Windows窗體介紹
5.2Windows窗體中常用的控件
5.3C#中的消息框 5.4實(shí)例2:創(chuàng)建一個(gè)使用控件的應(yīng)用
5.5窗體容器簡介 5.6實(shí)例3:創(chuàng)建多窗體的應(yīng)用程序
5.7綜合案例:學(xué)生信息管理系統(tǒng)界面制作本章小結(jié)
練習(xí)與作業(yè)
上機(jī)部分(五)
學(xué)習(xí)目標(biāo)●使用C#?創(chuàng)建Windows應(yīng)用程序●學(xué)會(huì)使用WinForms中的常用控件●學(xué)會(huì)使用消息框●學(xué)會(huì)創(chuàng)建多窗體的Windows程序5.1Windows窗體介紹每個(gè)Windows應(yīng)用程序都有兩個(gè)部分:用戶界面和業(yè)務(wù)邏輯。用戶界面是用戶和應(yīng)用程序進(jìn)行交互的屏幕。業(yè)務(wù)邏輯是一組用來執(zhí)行程序的邏輯代碼。到目前為止,我們已經(jīng)創(chuàng)建了控制臺(tái)應(yīng)用程序,這些應(yīng)用程序的共同特點(diǎn)是,沒有一個(gè)圖形化的界面。為了給應(yīng)用程序添加用戶界面的功能,Microsoft推出了Windows窗體。VisualStudio.NET的IDE,就是用于開發(fā)Windows窗體的工具,它為我們提供了各種現(xiàn)成的界面組件。Windows窗體也稱為WinForms,它并不具備創(chuàng)建Windows應(yīng)用程序所需的全部功能,只具有創(chuàng)建用戶界面的功能。要?jiǎng)?chuàng)建程序的業(yè)務(wù)邏輯,使各種組件按照用戶要求進(jìn)行工作,還需要編寫C#?代碼。下面將學(xué)習(xí)如何利用C#語言并通過VisualStudio.NET?2005開發(fā)一個(gè)簡單的Windows窗體程序。5.1.1用C#?創(chuàng)建Windows應(yīng)用程序在本節(jié)中,將使用?.NET開發(fā)環(huán)境,創(chuàng)建一個(gè)新的Windows窗體程序,操作步驟如下。
1.創(chuàng)建項(xiàng)目創(chuàng)建一個(gè)Windows窗體程序的步驟如下:
(1)啟動(dòng)Visual
Studio.NET?2005。(2)選擇“File”菜單上的“新建”,然后單擊“項(xiàng)目…”,彈出如圖5-1所示的對(duì)話框。
(3)在“項(xiàng)目類型”窗格中,單擊“VisulaC#Windows”;在“模板”窗格中,單擊“Windows應(yīng)用程序”。然后在“名稱”文本框中輸入項(xiàng)目的名稱,單擊【確定】按鈕完成窗體的創(chuàng)建,進(jìn)入窗體設(shè)計(jì)器開始設(shè)計(jì)用戶界面,如圖5-2所示。
2.設(shè)置窗體屬性在窗體設(shè)計(jì)器中選中窗體,然后在屬性窗口中對(duì)窗體屬性做如下更改:
(1)“Text”屬性,表示窗口的標(biāo)題,輸入“第一個(gè)Windows程序”。(2)“Name”屬性,表示窗體的名稱,用于在代碼中引用窗體,輸入“Demo”。
(3)“BackgroundImage”屬性,表示窗體的背景圖片,單擊該屬性右側(cè)的按鈕,彈出如圖5-3所示的對(duì)話框。單擊【導(dǎo)入…】按鈕,選擇某張圖片,再單擊【確定】按鈕,完成背景圖片的設(shè)置。
(4)“BackgroundImageLayout”屬性,表示窗體背景圖片的顯示方式,在下拉列表框中選擇“Stretch”,以拉伸的方式顯示圖片。
(5)“FormBorderStyle”屬性,表示窗體的邊框樣式,在下拉列表框中選擇“FixedDialog”,使窗體不能通過拖動(dòng)邊框來改變大小。圖5-1“新建項(xiàng)目”對(duì)話框圖5-2創(chuàng)建窗體圖5-3“選擇資源”對(duì)話框3.設(shè)置控件屬性
(1)單擊IDE環(huán)境中左邊的工具箱【AllWindowsForms】按鈕,在該欄中單擊命令按鈕,在窗體上畫出一個(gè)按鈕,如圖5-4所示。
(2)將該按鈕的【Text】設(shè)置為【SayIt】。
(3)雙擊按鈕,進(jìn)入代碼編輯器,在“Click”事件中插入下列代碼:
MessageBox.Show("Iloveyou");(4)保存文件。
4.在IDE中運(yùn)行項(xiàng)目在VS.NET2005IDE中運(yùn)行項(xiàng)目的步驟如下:
(1)單擊工具欄上的【啟動(dòng)】按鈕,也可以按F5鍵來運(yùn)行項(xiàng)目,運(yùn)行效果如圖5-5所示。
(2)關(guān)閉空白窗體,返回編程環(huán)境。圖5-4界面設(shè)計(jì)圖5-5運(yùn)行效果5.生成項(xiàng)目當(dāng)編譯項(xiàng)目或者解決方案時(shí),會(huì)根據(jù)項(xiàng)目的不同設(shè)置,在項(xiàng)目文件夾的Debug\bin子文件夾或Release\bin子文件夾中生成可執(zhí)行文件(?.exe)。
6.查看文件在解決方案資源管理器“SolutionExplorer”中查看文件的步驟為:
(1)如果還未打開“SolutionExplorer”,則單擊“View”菜單上的“SolutionExplorer”。
(2)展開其中的節(jié)點(diǎn)來查看文件。
7.保存和關(guān)閉項(xiàng)目關(guān)閉項(xiàng)目并退出VisualStudio.NET2005的步驟為:
(1)單擊“File”菜單上的“Exit”。
(2)如果提示是否保存更改,單擊【確定】。5.2Windows窗體中常用的控件窗體對(duì)象可以包含許多可視或不可視的頁面組件??梢暤捻撁娼M件統(tǒng)稱為“控件”——Control。Control類是可以在Windows窗體中使用的所有控件的基類。Label、Button、TextBox等控件都是從這個(gè)基類派生而來的。圖5-6列出了在VS2005工具欄中的Windows窗體控件。有些屬性是絕大多數(shù)控件所共有的,表5-1列出了這些通用屬性的一部分。圖5-6控件工具箱表5-1控件的通用屬性
讀取和設(shè)置控件的這些屬性,請參考下面的代碼段:
textBox1.Text="hello";this.textBox1.Text="hello";
在代碼段中,兩條指令都執(zhí)行相同的任務(wù):在文本框中顯示字符串。兩條語句的區(qū)別在于,第二條語句使用了this關(guān)鍵字。this表示當(dāng)前活動(dòng)的窗體。借助this關(guān)鍵字,可以訪問這個(gè)窗體的所有屬性、方法和事件,也可以利用智能提示功能快速地訪問窗體中的控件。5.2.1標(biāo)簽
Label標(biāo)簽用于顯示用戶無法編輯的文本,通常用于標(biāo)示輸入?yún)^(qū)或窗體中顯示的信息。為標(biāo)簽的Text屬性賦值時(shí),可以使用回車和換行的組合強(qiáng)制換行。向窗體添加該標(biāo)簽時(shí),會(huì)創(chuàng)建一個(gè)Label對(duì)象。Label控件的圖標(biāo)為。表5-2列出了Label控件支持的一些屬性及其說明。雖然無法在運(yùn)行時(shí)由用戶直接輸入文本,我們?nèi)匀豢梢酝ㄟ^代碼實(shí)現(xiàn)在程序運(yùn)行時(shí)改變Label控件中的文本。例如可以在Button控件的Click事件中實(shí)現(xiàn)這一功能。代碼如下:
privatevoidbutton1_Click(objectsender,System.EventArgse) { this.label1.Text="單擊按鈕時(shí)出現(xiàn)"; }表5-2Label控件的常見屬性5.2.2文本框
TextBox控件用于獲取用戶輸入或者向用戶顯示文本。默認(rèn)情況下,最多可在一個(gè)文本框中輸入2048個(gè)字符。
TextBox可顯示多行,對(duì)文本換行使其符合控件的大小及添加基本的格式設(shè)置。TextBox控件為在其中顯示或輸入的文本提供單個(gè)格式化樣式。要顯示多種類型的帶格式文本,可使用RichTextBox控件。向窗體添加TextBox控件時(shí),會(huì)創(chuàng)建一個(gè)TextBox對(duì)象。TextBox控件的圖標(biāo)為。表5-3列出了TextBox控件支持的一些屬性、方法和事件及其功能描述。表5-3TextBox控件的常見屬性、方法和事件5.2.3按鈕
Button控件提供了使用戶能夠與應(yīng)用程序交互的最簡便的方法。用戶可以通過單擊按鈕來執(zhí)行程序代碼。雖然通常使用按鈕的方式是單擊,但是也可以定義允許用戶操作的訪問鍵。訪問鍵用Text屬性指定,在用作訪問鍵的字母前加一個(gè)“&”字符。該字符不顯示在按鈕上,而用作訪問鍵的字母下加了下劃線。向窗體添加Button控件時(shí),會(huì)創(chuàng)建一個(gè)Button對(duì)象。Button按鈕的圖標(biāo)為。表5-4列出了Button控件支持的一些屬性、方法和事件及其功能描述。表5-4Button控件的常見屬性、方法和事件5.2.4實(shí)例1:制作登錄界面下面將結(jié)合上面已講的三個(gè)控件,創(chuàng)建一個(gè)簡易的登錄窗體,步驟如下:
(1)首先創(chuàng)建一個(gè)WinForm程序LoginApp,對(duì)窗體Form1的設(shè)計(jì)界面如圖5-7所示,相應(yīng)控件的屬性設(shè)置如表5-5所示.圖5-7設(shè)計(jì)界面表5-5控件屬性(2)然后雙擊Button,進(jìn)入Click事件并輸入以下代碼:
privatevoidbtnLogin_Click(objectsender,System.EventArgse) { if(txtName.Text=="admin"&&txtPwd.Text=="123") lblResult.Text="歡迎登錄!"; else { lblResult.Text="用戶名或密碼有誤"; txtName.Focus(); txtName.SelectAll(); } }(3)最終程序的運(yùn)行結(jié)果如圖5-8所示。圖5-8運(yùn)行結(jié)果5.2.5列表框
ListBox控件顯示一個(gè)較長的選項(xiàng)列表,用戶可以從該列表中選擇自己的選項(xiàng)。列表中的每個(gè)元素稱為項(xiàng)。如果項(xiàng)的總數(shù)超出可以顯示的項(xiàng)數(shù),則自動(dòng)向ListBox控件中添加滾動(dòng)條。ListBox控件在工具欄中的圖標(biāo)是。表5-6列出了ListBox控件支持的一些屬性和事件及其功能描述。
SelectedItem屬性類似于SelectedIndex,但它返回項(xiàng)的本身,通常是字符串值。Items.Count屬性表示列表中的項(xiàng)數(shù),并且Items.Count的值總是比SelectedIndex的最大可能值大1,因?yàn)镾electedIndex是從0開始的。若要在ListBox中添加或刪除項(xiàng),可使用Items.Add、Items.Insert、Items.Clear或Items.Remove方法,或者在設(shè)計(jì)時(shí)使用Items屬性向其中添加項(xiàng)。表5-6ListBox控件的常見屬性、方法和事件【例5-1】
下面將創(chuàng)建一個(gè)ListBox例子,在窗體上放置兩個(gè)listBox控件,設(shè)計(jì)界面如圖5-9所示。程序代碼如下所示:
privatevoidForm1_Load(objectsender,EventArgse){listBox1.Items.Add("性別");listBox1.Items.Add("職業(yè)");}privatevoidlistBox1_MouseClick(objectsender,MouseEventArgse){listBox2.Items.Clear();if(listBox1.SelectedItem.ToString()=="性別"){listBox2.Items.Add("男");listBox2.Items.Add("女");}elseif(listBox1.SelectedItem.ToString()=="職業(yè)"){listBox2.Items.Add("工人");listBox2.Items.Add("農(nóng)民");listBox2.Items.Add("學(xué)生");listBox2.Items.Add("知識(shí)分子");}}privatevoidlistBox2_Click(objectsender,EventArgse){ MessageBox.Show("您的職業(yè)是"+listBox2.SelectedItem.ToString());}圖5-9設(shè)計(jì)界面
在上面的代碼中,有三種不同的事件。其中Form1_Load事件在窗體裝載時(shí)運(yùn)行,因此常常把初始化的信息放在這里。當(dāng)單擊listBox1控件時(shí),引發(fā)listBox1_MouseClick事件,此時(shí)判斷用戶單擊listBox1的選項(xiàng),動(dòng)態(tài)地在listBox2中載入相應(yīng)的選項(xiàng)。當(dāng)鼠標(biāo)點(diǎn)在listBox2上時(shí),直接將用戶的選擇顯示在一個(gè)消息框中。程序運(yùn)行的結(jié)果如圖5-10所示。
CheckedListBox控件對(duì)ListBox控件進(jìn)行了擴(kuò)展。該控件在列表中的項(xiàng)旁邊提供了一個(gè)復(fù)選框,這樣,用戶可同時(shí)勾選多個(gè)列表項(xiàng)。效果如圖5-11所示。CheckedListBox控件在工具欄中的圖標(biāo)是。表5-7列出了CheckedListBox控件支持的一些屬性、方法和事件及其功能描述。圖5-10程序運(yùn)行結(jié)果圖5-11CheckedListBox顯示效果表5-7CheckedListBox控件的常見屬性、方法和事件5.2.6組合框
ComboBox控件組合了TextBox控件和ListBox控件的功能。使用此控件,用戶可以通過在組合框中鍵入文本來選擇項(xiàng),也可以從列表中選擇項(xiàng)。ComboBox類是從類ListControl派生而來的,它支持ListBox控件的幾乎所有屬性。向窗體添加ComboBox控件時(shí),會(huì)創(chuàng)建一個(gè)ComboBox對(duì)象。ComboBox控件在工具欄中的圖標(biāo)是。表5-8列出了ListBox控件支持的一些屬性、方法和事件及其功能描述。
【例5-2】下面將創(chuàng)建一個(gè)ComboBox案例,在窗體上放置一個(gè)ComboBox控件,設(shè)計(jì)界面如圖5-12所示。表5-8ComboBox控件的常見屬性、方法和事件圖5-12設(shè)計(jì)界面
程序代碼如下所示:
privatevoidForm1_Load(objectsender,EventArgse){comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;comboBox1.Items.Add("工人");comboBox1.Items.Add("農(nóng)民");comboBox1.Items.Add("學(xué)生");comboBox1.Items.Add("知識(shí)分子");}privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse){MessageBox.Show("您的職業(yè)是"+comboBox1.SelectedItem.ToString());}
注意,在Form1_Load事件中初始化代碼時(shí)將comboBox1的DropDownStyle屬性設(shè)置為DropDownList,這樣用戶只能選擇項(xiàng)目而不能輸入文字了。程序運(yùn)行的結(jié)果如圖5-13所示。圖5-13例5-2運(yùn)行結(jié)果5.3C#中的消息框消息框是一個(gè)預(yù)定義的對(duì)話框,用于向用戶顯示信息或詢問一些簡單的信息。圖5-13的彈出窗口就是一個(gè)消息框。消息框用類MessageBox表示,它位于命名空間System.Windows.Forms中。如要?jiǎng)?chuàng)建消息框,可使用下面的語法來調(diào)用MessageBox函數(shù):
MessageBox.Show(//參數(shù)設(shè)置);
創(chuàng)建消息框的步驟如下:
(1)找到消息框代碼要添加的位置。例如,如果窗體上有button1按鈕,則可將代碼添加在button1_Click事件處理程序中。
(2)在button1_Click事件中添加代碼:MessageBox.Show()。
(3)指定消息框選項(xiàng)。MessageBox類的Show方法的參數(shù)列表有21種形式。輸入第(2)步中的代碼后,將自動(dòng)顯示一個(gè)提示窗口來顯示其中一種形式所需要輸入的參數(shù)。使用鍵盤上的向上和向下鍵查看這21種形式,如圖5-14所示。
(4)依次輸入需要的參數(shù)。參數(shù)之間必須用逗號(hào)隔開,整個(gè)參數(shù)列表必須包含在一對(duì)圓括號(hào)()中。表5-9列出了Show方法中需要的幾個(gè)重要的參數(shù)及其含義。圖5-14MessageBox的使用表5-9Show方法中幾個(gè)重要的參數(shù)
圖5-15使用了上表的示例選項(xiàng),效果如下。相關(guān)的代碼如下所示:
MessageBox.Show("Doyouwanttosavethisfile?", "QuestionBox",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);圖5-15一個(gè)消息框5.4實(shí)例2:創(chuàng)建一個(gè)使用控件的應(yīng)用程序在這一節(jié)中,我們將學(xué)習(xí)如何使用WinForms中的控件和消息框,創(chuàng)建一個(gè)信息錄入界面。具體步驟如下:
(1)創(chuàng)建一個(gè)Windows應(yīng)用程序。
(2)設(shè)計(jì)如圖5-16所示的窗體界面。
(3)按照表5-10中所示設(shè)置控件的屬性。
(4)將用戶選擇的“標(biāo)準(zhǔn)/班級(jí):”信息存儲(chǔ)在public變量std中。聲明變量:
publicstringstd;圖5-16設(shè)計(jì)界面表5-10控件的屬性(5)在ListBox控件ListStd的SelectedIndexChanged事件中輸入下列代碼:
privatevoidListStd_SelectedIndexChanged(objectsender,System.EventArgse){ std=ListStd.Text;}(6)類似地,將用戶選擇的“系:”存儲(chǔ)在public變量div中。聲明變量:
publicstringdiv;(7)在ComboBox控件cbDiv的SelectedIndexChanged事件中輸入下列代碼:privatevoidcbDiv_SelectedIndexChanged(objectsender,System.EventArgse){ div=cbDiv.Text;}(8)當(dāng)用戶單擊【確認(rèn)學(xué)員詳細(xì)信息】按鈕時(shí),確認(rèn)輸入的詳細(xì)信息。在buttonConfirm按鈕的Click事件中,輸入下列代碼:
privatevoidbuttonConfirm_Click(objectsender,System.EventArgse) { intcnt; stringhobby=""; cnt=this.clHobby.CheckedItems.Count; for(inty=0;y<cnt;y++) { hobby=hobby+clHobby.CheckedItems[y]+","; }MessageBox.Show(txtName.Text+"出生于"+txtDtofBirth.Text+ "來自標(biāo)準(zhǔn)/班級(jí):"+std+",系:"+div+"具有下列愛好:"+hobby); }(9)【清除】按鈕用于清除用戶輸入的值。在buttonClear按鈕的Click事件中,輸入下列代碼:
privatevoidbuttonClear_Click(objectsender,System.EventArgse) { txtName.Text=""; txtDtofBirth.Text=""; listStd.SelectedIndex=-1; clHobby.Items.Clear(); clHobby.Items.AddRange(newobject[]{"唱歌","跳舞","游泳","閱讀"}); }(10)保存并運(yùn)行應(yīng)用程序,查看效果。5.5窗體容器簡介窗體是編寫Windows應(yīng)用程序的基礎(chǔ),應(yīng)用程序的基本單元都是窗體。窗體也是提供給用戶以便與應(yīng)用程序交互的屏幕。用戶提供所需的詳細(xì)信息以及查看所請求的信息都是通過窗體進(jìn)行的。一個(gè)應(yīng)用程序可以有多個(gè)窗體。窗體可以是下列組件中的一種。
標(biāo)準(zhǔn)窗口
多文檔界面
對(duì)話框
圖形程序的顯示界面
在WinForms中,窗體表示為類。Form類可用于創(chuàng)建標(biāo)準(zhǔn)、無邊框的浮動(dòng)窗口。新建應(yīng)用程序時(shí),會(huì)自動(dòng)為應(yīng)用程序添加一個(gè)窗體。將窗體添加到應(yīng)用程序中時(shí),將會(huì)創(chuàng)建一個(gè)Form類的實(shí)例。5.5.1窗體屬性窗體的屬性既可以通過編寫代碼,也可以通過使用屬性窗口來設(shè)置。設(shè)計(jì)時(shí)(即指在設(shè)計(jì)應(yīng)用程序時(shí))所作的屬性設(shè)置都將作為應(yīng)用程序每次運(yùn)行時(shí)的初始設(shè)置。在設(shè)計(jì)時(shí)設(shè)置窗體屬性的操作步驟如下:
(1)如果屬性窗口還未打開,單擊“視圖”菜單上的“屬性窗口”。
(2)在設(shè)計(jì)視圖中,單擊要設(shè)置屬性的窗體。窗體的名稱出現(xiàn)在屬性窗口頂部的Object下拉列表中。(3)用屬性窗口中的按字母排序按鈕和按分類順序按鈕來選擇屬性的顯示方式,即按照字母順序顯示還是按照類別分類顯示。
(4)在屬性窗口中,單擊要設(shè)置的屬性。注意,單擊屬性時(shí),該屬性的相關(guān)描述就出現(xiàn)在屬性窗口底部的Description窗格中。
(5)輸入或選擇需要的屬性設(shè)置。
(6)要查看新的屬性設(shè)置如何作用于窗體,可以單擊標(biāo)準(zhǔn)工具欄上的啟動(dòng)按鈕來運(yùn)行應(yīng)用程序。表5-11描述了一些常用的窗體屬性,在設(shè)計(jì)時(shí)一般都要對(duì)這些屬性進(jìn)行設(shè)置。表5-11常用的窗體屬性5.5.2窗體的常用方法和事件
1.窗體方法窗體提供了一些特定的方法,也就是它們所能執(zhí)行的操作。通過調(diào)用窗體的某一方法可指定執(zhí)行相應(yīng)的操作。
1)常用方法表5-12描述了一些常用的窗體方法。
2)語法如要在代碼中調(diào)用窗體的方法,可使用下面的語法:this.Method();
?this是指當(dāng)前的窗體實(shí)例。
Method是指調(diào)用的窗體方法。
代碼后面必須添加一對(duì)圓括號(hào)(),可在其中附加參數(shù)等信息。表5-12常用的窗體方法3)調(diào)用方法示例以下代碼通過調(diào)用窗體的CenterToScreen方法使窗體居中顯示:
this.CenterToScreen();4)使用智能感知提供了智能感知(IntelliSense)功能,即在彈出窗口和下拉列表中顯示和代碼有關(guān)的信息,從而方便用戶的輸入??梢允褂弥悄芨兄獊聿榭春瓦x擇對(duì)象可用的屬性、方法和對(duì)象事件。使用智能感知來查看和選擇可用窗體方法的步驟如下:
(1)在設(shè)計(jì)視圖中雙擊窗體。雙擊窗體后,將打開代碼編輯器,并將設(shè)置光標(biāo)在代碼塊中的位置。在這個(gè)示例中,將使用智能感知來為Form1_Load事件添加代碼。(2)輸入this。輸入句點(diǎn)(.)后,智能感知將自動(dòng)顯示窗體可用的屬性和方法,其中: 圖標(biāo)表示方法 圖標(biāo)表示屬性 圖標(biāo)表示事件
(3)雙擊要調(diào)用的方法。選中的方法將自動(dòng)輸入到代碼中,然后智能感知窗口就會(huì)自動(dòng)關(guān)閉。
2.窗體事件如要響應(yīng)對(duì)于對(duì)象所執(zhí)行的操作,則需在事件處理程序中編寫相關(guān)的代碼。這樣當(dāng)事件發(fā)生時(shí),就會(huì)執(zhí)行這些代碼。表5-13描述了一些常用的窗體事件。表5-13常用的窗體事件
事件是和事件處理程序聯(lián)系在一起的。事件處理程序是指當(dāng)相應(yīng)的事件發(fā)生時(shí)即調(diào)用的一段代碼。例如,可以在窗體的Activated事件的處理程序中編寫代碼來執(zhí)行一些操作,如更新窗體控件的顯示內(nèi)容。注意:窗體事件按特定的順序發(fā)生。例如,Load事件發(fā)生在Activated事件之前。因?yàn)槭录l(fā)生的順序就決定了代碼運(yùn)行的順序,所以了解事件發(fā)生的順序非常重要。添加事件處理程序的步驟如下:
(1)在設(shè)計(jì)窗口選定要添加事件處理程序的窗體。
(2)找到屬性窗口,點(diǎn)擊按鈕。
(3)在出現(xiàn)的各種事件中選擇一種,雙擊進(jìn)入后臺(tái)代碼,編寫事件處理程序。具體效果如圖5-17所示。圖5-17如何選擇窗體事件5.5.3建立窗體之間的鏈接在大部分應(yīng)用程序中,用戶界面都由多個(gè)窗口或?qū)υ捒蚪M成。如果應(yīng)用程序需要使用多個(gè)窗體,就要確定這些窗體是模態(tài)的還是非模態(tài)的。
1.非模態(tài)窗體非模態(tài)窗體允許用戶在不關(guān)閉該窗體的前提下就可切換到另一個(gè)窗體或?qū)υ捒颉H绻脩舸蜷_了多個(gè)非模態(tài)窗口,就可以把其中一個(gè)窗口移開,無需關(guān)閉該窗口,即可與其他窗體進(jìn)行交互。
2.模態(tài)窗體模態(tài)窗體在關(guān)閉前是不允許用戶與程序中的其他窗體進(jìn)行交互的。在對(duì)其他窗體進(jìn)行操作前,必須在程序中隱藏或關(guān)閉模態(tài)窗體(常用于響應(yīng)用戶操作)。例如,一個(gè)消息框就是模態(tài)窗體的示例。用戶與程序中的其他窗體進(jìn)行交互前必須先關(guān)閉該消息框。在C#?中創(chuàng)建的窗體都缺省為非模態(tài)。如要?jiǎng)?chuàng)建模態(tài)窗體,則需調(diào)用窗體的ShowDialog方法。下列代碼段顯示如何以有模式格式顯示窗體。
FormAboutf=newFormAbout();f.ShowDialog();ShowDialog方法有一個(gè)可選參數(shù)owner,該參數(shù)可用于指定窗體的父子關(guān)系。例如,當(dāng)主窗體中的代碼顯示對(duì)話框時(shí),可將this作為該對(duì)話框的所有者傳遞,以使主窗體成為所有者,如以下代碼段所示:
FormAboutf=newFormAbout();f.ShowDialog(this);
將窗體顯示為無模式對(duì)話框可以調(diào)用Show方法。下列示例顯示如何以無模式格式顯示對(duì)話框。
FormAboutf=newFormAbout();f.Show();
如果窗體顯示為有模式,則在關(guān)閉該對(duì)話框前,不執(zhí)行ShowDialog方法后面的代碼。但是,當(dāng)窗體顯示為無模式時(shí),該窗體在顯示之后,會(huì)立刻執(zhí)行Show方法后面的代碼。
3.隱藏窗體
Hide方法使窗體對(duì)象不可見,但不關(guān)閉它,也就是雖然該窗體不顯示,但它所包含的對(duì)象和變量仍保留在內(nèi)存中。可使用Hide方法在一個(gè)打開的窗體中隱藏另外一個(gè)窗體,語法如下:
FormName.Hide();
如要隱藏當(dāng)前正在運(yùn)行的窗體,可使用關(guān)鍵字this來調(diào)用該窗體的Hide方法。如下所示:
this.Hide();4.窗體交互考慮這樣一個(gè)場景:用戶單擊第一個(gè)窗體上的某個(gè)按鈕,應(yīng)用程序就會(huì)顯示第二個(gè)窗體。當(dāng)?shù)诙€(gè)窗體打開后,用戶不再需要顯示第一個(gè)窗體,但需要處理該窗體中的變量或者元素,因此不能關(guān)閉第一個(gè)窗體。如要實(shí)現(xiàn)這個(gè)場景,則需在第一個(gè)窗體中添加一個(gè)按鈕,并為其Click事件添加如下代碼:
privatevoidbutton1_Click(objectsender,System.EventArgse){ FormAboutf=newFormAbout();f.Show(); this.Hide();}
5.關(guān)閉窗體
Close方法用來關(guān)閉窗體對(duì)象。關(guān)閉窗體后,所有創(chuàng)建在該窗體中的資源都被關(guān)閉,且窗體被清除??墒褂肅lose方法在一個(gè)打開的窗體中關(guān)閉另外一個(gè)窗體,語法如下:
FormName.Close();如要關(guān)閉當(dāng)前正在運(yùn)行的窗體,可使用關(guān)鍵字this來調(diào)用該窗體的Close方法,如下所示:
this.Close();
注意:多文檔界面(MDI)應(yīng)用程序允許同時(shí)顯示多個(gè)文檔,其中每個(gè)文檔都顯示在各自的窗口中。MDI應(yīng)用程序通常都有一個(gè)Window菜單,可用于在窗口之間或者文檔之間切換,這些知識(shí)我們將在后續(xù)章節(jié)進(jìn)行講解。5.6實(shí)例3:創(chuàng)建多窗體的應(yīng)用程序在這一節(jié)中,我們將學(xué)習(xí)如何創(chuàng)建多窗體的WinForms應(yīng)用程序,并在不同窗體間傳遞數(shù)據(jù)。具體步驟如下:
(1)創(chuàng)建一個(gè)5.2.3節(jié)所示的Windows應(yīng)用程序LoginApp,具體的屬性設(shè)置和窗體設(shè)計(jì)可參考該節(jié)。
(2)在該項(xiàng)目中單擊右鍵,添加一個(gè)新窗體Form2。
(3)在窗體Form2上添加一個(gè)Label,按照表5-14中所示設(shè)置Label的屬性。表5-14Label屬性設(shè)置(4)在窗體Form2的類中添加一個(gè)公有屬性成員UserName:
publicclassForm2:System.Windows.Forms.Form { privateSystem.Windows.Forms.Labellabel1; //… publicstringUserName //添加一個(gè)屬性
{ get{returnthis.label1.Text;} set{this.label1.Text=value;} } //…}(5)選擇窗體Form1,然后雙擊Button,進(jìn)入Click事件并輸入以下代碼:
privatevoidbtnLogin_Click(objectsender,System.EventArgse) { if(txtName.Text=="admin"&&txtPwd.Text=="123") { Form2myfrm=newForm2(); myfrm.UserName=this.txtName.Text+"歡迎你!"; myfrm.ShowDialog(); myfrm.Dispose(); } else { lblResult.Text="用戶名或密碼有誤"; txtName.Focus(); txtName.SelectAll(); } }(6)保存并運(yùn)行該程序,我們發(fā)現(xiàn),當(dāng)用戶輸入正確的用戶名和密碼后,程序?qū)⑥D(zhuǎn)移至第二個(gè)界面,同時(shí)在第二個(gè)界面上顯示用戶名和歡迎信息。具體實(shí)現(xiàn)效果如圖5-18所示。圖5-18運(yùn)行結(jié)果5.7綜合案例:學(xué)生信息管理系統(tǒng)界面制作在前面的章節(jié)中,我們介紹了幾種常見的Windows控件,并講解了如何在窗體之間進(jìn)行鏈接和顯示。在這一節(jié)中,我們將結(jié)合上面的兩部分知識(shí)點(diǎn),開發(fā)一個(gè)帶有登錄界面的學(xué)生信息管理系統(tǒng)。具體的創(chuàng)建步驟如下:
(1)創(chuàng)建一個(gè)Windows應(yīng)用程序StudentManageSystem。
(2)為該應(yīng)用程序添加三個(gè)Windows窗體,分別為LoginFrm.cs、MainFrm.cs和HelpFrm.cs。下面來設(shè)置這三個(gè)窗體的頁面布局和顯示屬性。①登錄窗體LoginFrm.cs。在該窗體中添加各種控件,其設(shè)計(jì)效果如圖5-19所示。圖5-19LoginFrm界面
按照表5-15設(shè)置該窗體屬性和控件屬性的值。②主程序窗體MainFrm.cs。在該窗體中添加各種控件,其設(shè)計(jì)效果如圖5-20所示。按照表5-16設(shè)置該窗體屬性和控件屬性的值。注意:當(dāng)設(shè)計(jì)好上述屬性后,將名為“學(xué)生詳細(xì)信息”的GroupBox和名為“學(xué)生信息查詢”的GroupBox進(jìn)行重疊,使其顯示圖5-21所示的效果,此時(shí)“學(xué)生詳細(xì)信息”的GroupBox在“學(xué)生信息查詢”的GroupBox的下面。表5-15LoginFrm界面屬性設(shè)置圖5-20MainFrm界面表5-16MainFrm界面屬性設(shè)置圖5-21MainFrm界面③幫助窗體HelpFrm.cs。在該窗體中添加各種控件,其設(shè)計(jì)效果如圖5-22所示。按照表5-17設(shè)置該窗體屬性和控件屬性的值。圖5-22HelpFrm界面表5-17HelpFrm界面屬性設(shè)置(3)為程序添加代碼。①登錄窗體LoginFrm.cs。雙擊該窗體的【登錄】按鈕,進(jìn)入btnLogin_Click事件,添加如下代碼:
privatevoidbtnLogin_Click(objectsender,EventArgse){if(txtUserName.Text=="admin"&&txtPwd.Text=="123"){this.Hide();MainFrmmyfrm=newMainFrm();myfrm.Name=this.txtUserName.Text;myfrm.ShowDialog();this.Close();}else{MessageBox.Show("用戶名或密碼有誤");txtUserName.Focus();txtUserName.SelectAll();}}
雙擊該窗體的【取消】按鈕,進(jìn)入btnCancel_Click事件,添加如下代碼:
privatevoidbtnCancel_Click(objectsender,EventArgse){Application.Exit();}②主程序窗體MainFrm.cs。在MainFrm.cs代碼的命名空間下創(chuàng)建一個(gè)Class類,如下代碼所示:
publicclassStudent //學(xué)生類
{publicstringname;publicstringid;publicstringbirth;publicstringStuclass;publicstringhobby;}
雙擊該窗體的【信息錄入】按鈕,進(jìn)入btnInput_Click事件,添加如下代碼:privatevoidbtnInput_Click(objectsender,EventArgse){groupStuInfo.Visible=true;groupStuCheck.Visible=false;}
雙擊該窗體的【信息查詢】按鈕,進(jìn)入btnCheck_Click事件,添加如下代碼:
privatevoidbtnCheck_Click(objectsender,EventArgse){groupStuInfo.Visible=false;groupStuCheck.Visible=true;}
雙擊該窗體的【退出系統(tǒng)】按鈕,進(jìn)入btnExit_Click事件,添加如下代碼:
privatevoidbtnExit_Click(objectsender,EventArgse){Application.Exit();}
雙擊該窗體的【聯(lián)系我們】按鈕,進(jìn)入btnHelp_Click事件,添加如下代碼:
privatevoidbtnHelp_Click(objectsender,EventArgse){HelpFrmfm=newHelpFrm();fm.ShowDialog();}
雙擊“學(xué)生詳細(xì)信息”GroupBox上的【添加】按鈕,進(jìn)入btnAdd_Click事件,添加如下代碼。
同時(shí)在類中聲明一個(gè)靜態(tài)成員變量stuList。
privatestaticSortedListstuList=newSortedList(); //聲明靜態(tài)成員變量
privatevoidbtnAdd_Click(objectsender,EventArgse){stringhobby="";Studentstu=newStudent();stu.id=txtStuNo.Text;=txtStuName.Text;stu.birth=txtStuBirth.Text;stu.Stuclass=cmbStuClass.SelectedItem.ToString();foreach(objectiteminlstStuHobby.SelectedItems)hobby+=item.ToString()+",";stu.hobby=hobby;
stuList.Add(stu.id,stu);MessageBox.Show("學(xué)生信息已成功添加!");txtStuNo.Text="";txtStuName.Text="";txtStuBirth.Text="";cmbStuClass.SelectedIndex=-1;lstStuHobby.SelectedIndex=-1;}
雙擊“學(xué)生詳細(xì)信息”GroupBox上的【清空】按鈕,進(jìn)入btnClear_Click事件,添加如下代碼:
privatevoidbtnClear_Click(objectsender,EventArgse){txtStuNo.Text="";txtStuName.Text="";txtStuBirth.Text="";cmbStuClass.SelectedIndex=-1;lstStuHobby.SelectedIndex=-1;}
雙擊“學(xué)生信息查詢”GroupBox上的【查詢】按鈕,進(jìn)入btnStuCheck_Click事件,添加如下代碼:
privatevoidbtnStuCheck_Click(objectsender,EventArgse){if(txtStuNoCheck.Text.Trim()=="")MessageBox.Show("請輸入要查詢的學(xué)號(hào)。");else{Studentstu=(Student)stuList[txtStuNoCheck.Text];if(stu!=null){lblCheckResult.Text="學(xué)生姓名:"++"\r\n"+"出生日期:"+stu.birth+"\r\n"+"班級(jí):"+stu.Stuclass+"\r\n"+"愛好:"+stu.hobby;}elseMessageBox.Show("不存在這樣的學(xué)生!");}}(4)保存并運(yùn)行程序,最終的運(yùn)行效果如圖5-23~圖5-26所示。圖5-23登錄界面圖5-24主界面——添加學(xué)生信息圖5-25主界面——查詢學(xué)生信息圖5-26顯示幫助窗體本章小結(jié)
在WinForms中創(chuàng)建的Windows程序的基本單元是窗體。
窗體對(duì)象可以包含許多可視或不可視的頁面組件??梢暤捻撁娼M件統(tǒng)稱為“控件”。
this關(guān)鍵字表示當(dāng)前活動(dòng)的窗體對(duì)象。
Label標(biāo)簽用于顯示用戶無法編輯的文本。
TextBox控件用于獲取用戶輸入或者向用戶顯示文本。
Button控件提供了使用戶能夠與應(yīng)用程序交互的最簡便的方法。
?ListBox控件顯示一個(gè)較長的選項(xiàng)列表,用戶可以從該列表中選擇自己的選項(xiàng)。
CheckBox控件組合了TextBox控件和ListBox控件的功能。
消息框是一個(gè)預(yù)定義的對(duì)話框,用于向用戶顯示信息,或詢問一些簡單的信息。
一個(gè)應(yīng)用程序可以有多個(gè)窗體。窗體可以是標(biāo)準(zhǔn)窗口、多文檔界面、對(duì)話框和圖形程序的顯示界面組件中的一種。練習(xí)與作業(yè)一、選擇題
1.()控件組合了TextBox控件和ListBox控件的功能。
A.?Label B.?ComboBoxC.?StatusBar D.?PictureBox2.為了使TextBox的ScrollBar真正起作用,應(yīng)該將TextBox的“自動(dòng)換行”功能取消。取消該功能,需要將TextBox控件的()屬性設(shè)置為False。
A.?ScrollBars B.?AcceptReturnsC.?WordWrap D.?AutoSize3.?TextBox控件的PasswordChar屬性的作用是()。
A.該屬性是Boolean類型,表示是否使用*號(hào)隱藏輸入的信息
B.該屬性是String類型,表示輸入的隱藏信息的實(shí)際內(nèi)容C.該屬性是Char類型,表示是用哪個(gè)字符隱藏輸入的信息
D.該屬性在C#?中未使用
4.所有控件都有的屬性是()。
A.?Text B.?BackColorC.?Item D.?Name5.當(dāng)關(guān)閉窗體時(shí),將會(huì)引發(fā)Closed事件和Closing事件,下列說法正確的是()。
A.先引發(fā)Closed事件 B.?先引發(fā)Closing事件
6.()在響應(yīng)之前不允許用戶與程序中其他窗體進(jìn)行交互。
A.主窗體 B.對(duì)話框
C.模態(tài)窗體 D.非模態(tài)窗體7.如何將非模態(tài)窗體轉(zhuǎn)化成模態(tài)顯示?()A.將窗體的Model屬性設(shè)置成0 B.將窗體的Model屬性設(shè)置成1C.用Show方法顯示窗體
溫馨提示
- 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)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能圖像識(shí)別技術(shù)研發(fā)合作合同
- 安全操作注意事項(xiàng)說明
- 農(nóng)業(yè)科技服務(wù)農(nóng)業(yè)現(xiàn)代化發(fā)展策略研究
- 2025年成都貨運(yùn)從業(yè)資格考試題庫答案
- 勇氣揚(yáng)帆青春啟航
- 娛樂行業(yè)演唱會(huì)票務(wù)銷售合同
- 軟件測試業(yè)軟件測試流程和質(zhì)量管理
- 美容行業(yè)化妝品經(jīng)營與管理平臺(tái)建設(shè)方案
- 酒店管理服務(wù)合作協(xié)議
- 小學(xué)生科學(xué)讀物讀后感
- (完整版)公務(wù)員考試行測答題卡-高清A4標(biāo)準(zhǔn)打印版
- 南海局勢和國家安全
- 初中化學(xué)實(shí)驗(yàn)安全教育
- 《預(yù)測與決策教程第2版》(習(xí)題解答)機(jī)工版
- (正式版)YBT 6173-2024 鋼鐵行業(yè)沖擊負(fù)荷平抑用飛輪儲(chǔ)能系統(tǒng)技術(shù)規(guī)范
- GT 42456-2023 工業(yè)自動(dòng)化和控制系統(tǒng)信息安全 IACS組件的安全技術(shù)要求
- 服裝色彩搭配智慧樹知到期末考試答案2024年
- 自動(dòng)扶梯事故應(yīng)急處置預(yù)案
- 招生人員培訓(xùn)課件
- 2023-2024學(xué)年深圳市羅湖區(qū)七年級(jí)(上)期末考試 英語 試題(解析版)
- 中國陰離子交換膜行業(yè)調(diào)研分析報(bào)告2024年
評(píng)論
0/150
提交評(píng)論