版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章WinForm基礎(chǔ)(二)5.1控件5.2電影信息管理窗體5.3菜單5.4窗體互操作5.5用戶(hù)自定義選項(xiàng)
5.1控件
5.1.1選擇控件在實(shí)際的開(kāi)發(fā)過(guò)程中,選擇也是經(jīng)常會(huì)碰到的一種操作類(lèi)型,事實(shí)上我們?cè)谠O(shè)計(jì)程序的時(shí)候一般都會(huì)優(yōu)先考慮讓用戶(hù)進(jìn)行選擇操作而不是輸入操作,因?yàn)檫x擇操作是我們可以控制的,而輸入操作我們無(wú)法控制。選擇操作分為單選和多選,在WinForm中分別采用RadioButton控件和CheckBox控件來(lái)實(shí)現(xiàn)。這兩個(gè)控件的屬性幾乎是一樣的,常用的屬性有兩個(gè):Checked:控件是否處于選中狀態(tài)。Text:呈現(xiàn)在控件上的文本信息。RadioButton和CheckBox這兩個(gè)控件都沒(méi)有常用的方法,而對(duì)于常用的事件兩者是不一樣的。RadioButton控件的常用事件是Click,即控件被單擊的時(shí)候所觸發(fā)的事件,而CheckBox控件的常用事件是CheckedChanged,即控件的選中狀態(tài)發(fā)生變化時(shí)所觸發(fā)的事件。有一點(diǎn)需要特別說(shuō)明,在窗體上CheckBox控件是可以同時(shí)存在多組的,但是RadioButton則特殊一些,在同一個(gè)容器中只能存在一組,也就是說(shuō)如果不借助于其他控件,窗體上只能有一組RadioButton控件。如果需要在窗體上放置多組RadioButton控件,則需要借助于容器控件,常用的容器控件有GroupBox和Panel,在使用的時(shí)候首先把容器控件放置在窗體上,然后將RadioButton控件放置在容器空間中就可以了。CheckBox控件所使用的默認(rèn)事件是CheckedChanged,即選中狀態(tài)發(fā)生變化時(shí)所觸發(fā)的事件,當(dāng)我們需要根據(jù)用戶(hù)的選擇來(lái)完成不同的操作時(shí)可以使用該事件,一般來(lái)說(shuō)在使用的時(shí)候都要對(duì)控件的Checked屬性進(jìn)行判斷。RadioButton控件則有所不同,雖然其默認(rèn)事件也是CheckedChanged,但是在開(kāi)發(fā)的過(guò)程中其Click事件反倒用得更多些,這是因?yàn)閷?duì)于CheckBox控件來(lái)說(shuō),單擊可能是幾種不同的狀態(tài),而RadioButton控件只要是單擊,就一定會(huì)是選中的狀態(tài),這樣就省去了狀態(tài)判斷的過(guò)程了。5.1.2列表控件列表控件也是提供用戶(hù)選擇的控件,只是更加“節(jié)省”空間。常用的列表控件有ComboBox和ListBox兩個(gè),前者提供單選,后者提供多選。對(duì)于這兩個(gè)控件我們主要關(guān)注三個(gè)方面:如何設(shè)定選擇項(xiàng)、如何獲取選擇項(xiàng)以及如何刪除選擇項(xiàng)。1.設(shè)定選擇項(xiàng)ComboBox和ListBox都具有一個(gè)Items屬性,它們的選擇項(xiàng)就存放在這個(gè)屬性中,設(shè)定的方式有兩種:通過(guò)編輯器編輯和通過(guò)代碼設(shè)定。當(dāng)我們通過(guò)編輯器編輯選擇項(xiàng)的時(shí)候,首先需要找到Items屬性,點(diǎn)擊后面的按鈕就可以打開(kāi)選擇項(xiàng)編輯器,剩下的任務(wù)是在編輯器中寫(xiě)下我們所要提供出來(lái)的選項(xiàng)即可,如圖5-4所示。通過(guò)這種方式設(shè)定的選項(xiàng)很難根據(jù)實(shí)際情況發(fā)生變化,如果需要?jiǎng)討B(tài)設(shè)置選項(xiàng)內(nèi)容,就需要通過(guò)代碼的方式來(lái)完成:privatevoidfrmExample_Load(objectsender,EventArgse){comboBox1.Items.Add("開(kāi)發(fā)部");comboBox1.Items.Add("銷(xiāo)售部");comboBox1.Items.Add("后勤部");comboBox1.Items.Add("售后服務(wù)部");comboBox1.Items.Add("總經(jīng)辦");}在上面的代碼中,我們通過(guò)調(diào)用ComboBox控件Items屬性的Add()方法來(lái)完成動(dòng)態(tài)添加選擇項(xiàng)的任務(wù)。在使用Add()方法的時(shí)候,我們將需要添加的選擇項(xiàng)作為一個(gè)字符串參數(shù)傳遞給該方法就可以了。如果要設(shè)定ListBox控件,只需要將上述代碼中的comboBox1替換成ListBox控件的名稱(chēng)即可。即使這樣,這兩個(gè)控件還是有一些明顯的差別的。對(duì)于ComboBox控件來(lái)說(shuō),其最有趣的就是DropDownStyle屬性了,事實(shí)上這個(gè)控件可以看做是TextBox和ListBox兩個(gè)控件結(jié)合在一起而成的,因此它可能表現(xiàn)出多種不同的樣式,而這個(gè)屬性就是用來(lái)設(shè)定其樣式的,它有三個(gè)取值:Simple:控件表現(xiàn)為文本框樣式,可以輸入或通過(guò)鍵盤(pán)上下鍵選擇選項(xiàng)。DropDown:默認(rèn)樣式,控件表現(xiàn)為帶下拉鍵的樣式,可以輸入或通過(guò)鼠標(biāo)選擇選項(xiàng)。DropDownList:控件表現(xiàn)為帶下拉鍵的樣式,但只能夠通過(guò)鼠標(biāo)選擇選項(xiàng)。以上三種樣式的運(yùn)行結(jié)果如圖5-6所示。對(duì)于ListBox控件來(lái)說(shuō),需要特別注意它的SelectionMode屬性,這個(gè)屬性是用來(lái)設(shè)定ListBox控件的選擇模式的,它有四個(gè)取值:None:控件無(wú)法選擇任何內(nèi)容。One:默認(rèn)值,控件只能選中一個(gè)選項(xiàng)。MultiSimple:控件可以選中多個(gè)選項(xiàng),操作方式為點(diǎn)擊后選中,再次點(diǎn)擊后取消選中狀態(tài)。MultiExtended:控件可以選中多個(gè)選項(xiàng),操作方式為鼠標(biāo)拖動(dòng)選擇,點(diǎn)擊控件任意位置后取消選中狀態(tài)。以上四種狀態(tài)的運(yùn)行效果如圖5-7所示。2.獲取選擇項(xiàng)因?yàn)镃omboBox控件是單項(xiàng)選擇的控件,所以其取值比較簡(jiǎn)單,直接通過(guò)Text屬性就可以取得用戶(hù)選擇項(xiàng)的值:stringstr=comboBox1.Text;對(duì)于ListBox控件來(lái)說(shuō)就麻煩一些了,因?yàn)樗强梢远噙x的,所以就必須通過(guò)一個(gè)循環(huán)的方式來(lái)取得用戶(hù)所有的選擇項(xiàng),并且將結(jié)果進(jìn)行組合才能夠得到最終的結(jié)果:stringstr="";for(inti=0;i<listBox4.SelectedItems.Count;i++){str+=listBox4.SelectedItems[i].ToString()+";";}在上面的代碼中我們通過(guò)一個(gè)循環(huán)結(jié)構(gòu)來(lái)讀取用戶(hù)的選中信息,對(duì)于ListBox控件來(lái)說(shuō),用戶(hù)的選擇項(xiàng)被放在了SelectItems屬性中,因此我們才需要一個(gè)循環(huán)結(jié)構(gòu)。3.刪除選擇項(xiàng)列表控件的選擇項(xiàng)同樣可以動(dòng)態(tài)刪除,所使用的是Items屬性的兩個(gè)方法:Remove:刪除Items中指定的選擇項(xiàng)。RemoveAt:刪除Items中指定下標(biāo)的選擇項(xiàng)。對(duì)于ComboBox控件來(lái)說(shuō),使用哪個(gè)方法都一樣,但是對(duì)于ListBox控件來(lái)說(shuō),RemoveAt()方法使用得將會(huì)更多一些:for(inti=listBox1.SelectedIndices.Count-1;i>-1;i--){listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);}仔細(xì)觀察上面的代碼會(huì)發(fā)現(xiàn),有兩個(gè)地方比較引人注目。首先,我們用到了一個(gè)新的屬性SelectedIndices,它包含了ListBox控件中所有選擇項(xiàng)的下標(biāo)。另一個(gè)重要的地方就是,在執(zhí)行刪除操作的時(shí)候一定要從后向前刪除,因?yàn)槿绻麖那跋蚝髣h除,則每刪除一個(gè)項(xiàng),其他項(xiàng)的下標(biāo)就會(huì)發(fā)生變化。另外,我們也可以使用Items屬性的Clear()方法來(lái)清除所有的選擇項(xiàng)。ComboBox控件的默認(rèn)事件是SelectedIndexChanged,即選中項(xiàng)下標(biāo)發(fā)生變化時(shí)所觸發(fā)的事件,如果我們需要根據(jù)用戶(hù)不同的選擇來(lái)完成不同的操作時(shí)就可以使用該事件。ListBox控件雖然也有很多事件,但是在實(shí)際開(kāi)發(fā)的過(guò)程中一般很少用到,原因很簡(jiǎn)單:如果用戶(hù)每次操作都會(huì)觸發(fā)事件處理程序,就會(huì)嚴(yán)重影響到執(zhí)行效率,所以我們都是在用戶(hù)選擇完成后再處理。
5.2電影信息管理窗體
5.2.1問(wèn)題這一次我們將制作一個(gè)管理電影對(duì)象的窗體,窗體的運(yùn)行效果如圖5-8所示。這只是一個(gè)簡(jiǎn)單的窗體,并不能完成具體的功能,但是也有很多需求:(1)窗體不能最大化和最小化。(2)窗體不能改變大小。(3)首次運(yùn)行的時(shí)候窗體在屏幕正中。(4)地區(qū)下拉列表只能選擇不能輸入。(5)主演為多行文本框。(6)簡(jiǎn)介為RichTextBox。5.2.2需求分析1.控件設(shè)置由于涉及的控件比較多,因此我們通過(guò)表5-1加以說(shuō)明。2.界面操作在進(jìn)行界面設(shè)計(jì)的時(shí)候,最煩惱的莫過(guò)于控件的對(duì)齊和間距了,在VS2010中,我們可以通過(guò)“格式(O)”菜單下的一些操作來(lái)制作界面。選中界面中的多個(gè)元素,通過(guò)菜單格式→對(duì)齊→左對(duì)齊,就可以調(diào)整多個(gè)元素,如圖5-9所示。調(diào)整前后如圖5-10所示。除了左對(duì)齊之外,當(dāng)然還可以選擇右對(duì)齊或者中間對(duì)齊,如果是橫向的,則可以選擇頂端對(duì)齊或者底端對(duì)齊等。另外,如果希望控件的間距相等,則可以通過(guò)菜單中的“水平間距(H)”或者“垂直間距(V)”來(lái)調(diào)整。如果是單個(gè)控件,系統(tǒng)有另外一種更加便捷的方式來(lái)幫助我們調(diào)整控件:選中一個(gè)控件,把它拖動(dòng)到希望對(duì)齊的另一個(gè)控件旁邊,系統(tǒng)就會(huì)自動(dòng)出現(xiàn)對(duì)齊線(xiàn)。
5.3菜單
Windows應(yīng)用程序還有一個(gè)重要的特征:菜單。菜單一般都會(huì)出現(xiàn)在界面的頂端,其作用就是用很小的空間里將系統(tǒng)的功能進(jìn)行分類(lèi),然后呈現(xiàn)在用戶(hù)的面前。在WinForm中,菜單分為兩種:主菜單和上下文菜單。5.3.1主菜單主菜單放置在窗體的頂部,提供整個(gè)系統(tǒng)的完整功能展示。制作菜單很簡(jiǎn)單,在工具箱的“菜單和工具欄”選項(xiàng)卡中找到“MenuStrip”項(xiàng),將其拖曳到窗體上。這時(shí)在窗體的底部就會(huì)有一個(gè)單獨(dú)的區(qū)域用來(lái)存放MenuStrip對(duì)象,其實(shí)這個(gè)區(qū)域我們?cè)谇懊媸褂肨imer對(duì)象的時(shí)候曾經(jīng)出現(xiàn)過(guò),它主要是用來(lái)盛放那些運(yùn)行的時(shí)候不需要顯示出來(lái)的控件的,例如Timer、MenuStrip等。同時(shí),在窗體的頂部就會(huì)出現(xiàn)一個(gè)菜單編輯器。在WinForm中,菜單的編輯制作是一個(gè)所見(jiàn)即所得的過(guò)程,也就是說(shuō)我們編輯的菜單是什么樣子的,那么運(yùn)行的效果就是什么樣子的。在WinForm中所有的菜單都是ToolStripMenuItem對(duì)象,它的使用和普通的控件是一樣的,因此我們還是從屬性開(kāi)始來(lái)認(rèn)識(shí)菜單對(duì)象。選中一個(gè)菜單對(duì)象后,我們就可以在屬性窗口中看到其常用的屬性,這里只需要了解以下幾個(gè)屬性:Name:菜單對(duì)象在代碼中的唯一名稱(chēng),一般采用mnu作為前綴。Text:菜單對(duì)象上呈現(xiàn)出來(lái)的說(shuō)明性文字,當(dāng)文本為“-”符號(hào)時(shí)就呈現(xiàn)出一條分割線(xiàn)。ShortcutKeys:與菜單項(xiàng)相關(guān)聯(lián)的快捷鍵設(shè)置,這里可以選擇組合的快捷鍵。在使用主菜單時(shí)需要注意以下幾點(diǎn):(1)快捷鍵應(yīng)當(dāng)盡可能按照我們的日常習(xí)慣來(lái)設(shè)置,并且不和系統(tǒng)的常用快捷鍵相沖突。(2)盡管沒(méi)有規(guī)定,但是菜單最好不要設(shè)置超過(guò)三層,否則使用起來(lái)會(huì)很麻煩。(3)盡量合理地規(guī)劃和組織菜單,這會(huì)給用戶(hù)帶來(lái)很大的便利。菜單對(duì)象沒(méi)有常用的方法,常用的事件是Click,即菜單被單擊時(shí)所觸發(fā)的事件。5.3.2上下文菜單除了主菜單之外,在WinForm中還有一種稱(chēng)為上下文菜單的對(duì)象:ContentMenuStrip。這種菜單對(duì)象主要是用來(lái)實(shí)現(xiàn)右鍵彈出式菜單的。一般情況下,Windows應(yīng)用程序中的某些界面對(duì)象系統(tǒng)會(huì)自動(dòng)添加右鍵彈出菜單,但是如果我們需要自己定制這個(gè)菜單,就要借助于ContextMenuStrip對(duì)象了。制作上下文菜單的過(guò)程很簡(jiǎn)單。首先在工具箱中找到上下文菜單,雙擊或?qū)⑵渫弦返酱绑w上,這時(shí)就會(huì)在窗體上添加一個(gè)名稱(chēng)為contextMenuStrip1的對(duì)象,因?yàn)樗彩怯蒚oolStripMenuItem對(duì)象所組成的,所以其制作過(guò)程和制作主菜單的過(guò)程是一樣的。當(dāng)我們?cè)O(shè)置好ContextMenuStrip后,就可以使用它了。在窗體上放置一個(gè)控件,例如放置一個(gè)TextBox控件,然后查找其ContextMenuStrip屬性,在其下拉框中就可以看到我們剛才所添加的contextMenuStrip1對(duì)象了,如圖5-14所示。這樣我們就可以將兩個(gè)控件鏈接在一起了。運(yùn)行程序即可看到我們制作的菜單替換了系統(tǒng)原來(lái)的菜單,如圖5-15所示。
5.4窗體互操作
一個(gè)完整的應(yīng)用程序不可能只有一個(gè)窗體,而是由多個(gè)不同的窗體組合而成的,每個(gè)窗體負(fù)責(zé)一個(gè)簡(jiǎn)單的小模塊,最終組合為一個(gè)完整的應(yīng)用程序。既然是多個(gè)窗體,那么就有窗體之間的互操作,常見(jiàn)的互操作有跳轉(zhuǎn)、傳參和返回。5.4.1跳轉(zhuǎn)窗體間的跳轉(zhuǎn)就是通過(guò)在一個(gè)窗體上執(zhí)行一些操作來(lái)打開(kāi)另外一個(gè)窗體。這個(gè)過(guò)程其實(shí)也不難,只需要以下兩步:(1)通過(guò)new關(guān)鍵字創(chuàng)建新窗體的一個(gè)對(duì)象:frmFilmManagefm=newfrmFilmManage();(2)通過(guò)調(diào)用新窗體對(duì)象Show()方法來(lái)打開(kāi)新窗體,運(yùn)行效果如圖5-16所示。fm.Show();當(dāng)然這只是最簡(jiǎn)單的操作,通過(guò)這種方式所打開(kāi)的窗體被稱(chēng)為非模式窗體,也就是說(shuō)用戶(hù)完全不理會(huì)這個(gè)新窗體而不會(huì)影響到用戶(hù)的操作。如果需要用戶(hù)必須對(duì)新窗體做出響應(yīng),我們可以采用ShowDialog()方法:fm.ShowDialog();采用這種方式打開(kāi)的窗體稱(chēng)為模式窗體。模式窗體要求用戶(hù)必須做出響應(yīng),在這個(gè)窗體未關(guān)閉之前用戶(hù)是無(wú)法操作其他窗體的。另一個(gè)比較有趣的地方是,當(dāng)通過(guò)一個(gè)按鈕來(lái)打開(kāi)新窗體的時(shí)候,我們會(huì)發(fā)現(xiàn)反復(fù)點(diǎn)擊按鈕可以打開(kāi)多個(gè)窗體,也就是同時(shí)創(chuàng)建多個(gè)新窗體對(duì)象,這不但讓程序看起來(lái)很不友好,而且也會(huì)讓用戶(hù)變得很困惑。如何避免這種情況呢?這個(gè)過(guò)程稍微有點(diǎn)復(fù)雜。首先我們必須將剛才的對(duì)象聲明語(yǔ)句從按鈕的Click事件處理程序中取出來(lái),放置到類(lèi)當(dāng)中使對(duì)象窗體成為一個(gè)類(lèi)成員變量:publicpartialclassfrmFilmList:Form{frmFilmManagefm=null;//其他代碼}然后將按鈕的Click事件處理程序做如下修改:privatevoidbtnEdit_Click(objectsender,EventArgse){if((fm==null)||(fm.IsDisposed)){fm=newfrmFilmManage();fm.Show();}elsefm.Show();}在上面的代碼中,我們?cè)黾恿艘粋€(gè)if結(jié)構(gòu),通過(guò)對(duì)兩個(gè)條件的判斷來(lái)決定是否需要對(duì)窗體對(duì)象進(jìn)行實(shí)例化的操作。事實(shí)上,仔細(xì)分析一下我們就會(huì)知道只有在兩種情況下窗體才需要進(jìn)行實(shí)例化:第一次打開(kāi)和關(guān)閉后再次打開(kāi),除此之外都不需要進(jìn)行實(shí)例化操作。因此,在這個(gè)if結(jié)構(gòu)中我們添加了兩個(gè)條件,第一個(gè)條件fm==null判斷窗體是否是第一次打開(kāi),第二個(gè)條件fm.IsDisposed則是用來(lái)判斷窗體是否已經(jīng)被關(guān)閉了。IsDisposed是窗體的一個(gè)屬性,用來(lái)標(biāo)識(shí)窗體對(duì)象是否已經(jīng)被釋放,也就是說(shuō)窗體是否關(guān)閉了。經(jīng)過(guò)這樣的改造后,不管點(diǎn)擊多少次按鈕,窗體就只能夠被打開(kāi)一次。5.4.2傳參窗體間另一個(gè)比較常見(jiàn)的互操作是傳遞參數(shù)(傳參),即將參數(shù)從一個(gè)窗體傳遞到另外一個(gè)窗體。一般來(lái)說(shuō)傳參的操作都是建立在跳轉(zhuǎn)的基礎(chǔ)之上的。理論上說(shuō),要想從A窗體將數(shù)據(jù)傳遞到B窗體,那么B窗體首先必須要有公開(kāi)的數(shù)據(jù)接口,也就是要有外部用戶(hù)能夠訪(fǎng)問(wèn)到的可賦值成員。對(duì)于窗體來(lái)說(shuō),那就意味著窗體類(lèi)需要定義一些公有的成員以便于外部用戶(hù)訪(fǎng)問(wèn)。一旦B窗體定義了這些公有的成員,那么A窗體就可以通過(guò)B窗體的對(duì)象來(lái)完成賦值操作,也就完成了數(shù)據(jù)的傳遞工作。實(shí)際操作該如何完成呢?通過(guò)上面的分析我們可以看到,實(shí)際上問(wèn)題的焦點(diǎn)在于B窗體類(lèi)所定義的公有成員身上。類(lèi)的公有成員有很多,一般常用的是屬性、方法和構(gòu)造三種方式。當(dāng)然,不管采用哪種方式,都需要B窗體有一個(gè)字段來(lái)存放數(shù)據(jù)。首先在B窗體中定義一個(gè)私有的字段用來(lái)存放數(shù)據(jù):publicpartialclassfrmFilmManage:Form{//用戶(hù)存放數(shù)據(jù)的私有字段privatestringfilmName=null;//其他處理代碼}接下來(lái)將這個(gè)字段公開(kāi)出去,這樣就能夠用來(lái)接收數(shù)據(jù)了。我們可以采用屬性:publicstringFilmName{get{returnthis.filmName;}set{filmName=value;}}也可以采用方法來(lái)公開(kāi)它:publicvoidSetFilmName(stringname){filmName=name;}還可以采用構(gòu)造來(lái)完成這個(gè)工作:publicfrmFilmManage(stringname){InitializeComponent();filmName=name;}這里需要注意一點(diǎn),在使用構(gòu)造的時(shí)候最好將給字段賦值的語(yǔ)句寫(xiě)在InitializeComponent()方法的后面,因?yàn)檫@個(gè)方法是用來(lái)初始化窗體成員對(duì)象的,如果寫(xiě)在這個(gè)方法的前面,有可能會(huì)出現(xiàn)找不到對(duì)象的情況。完成了這些工作之后,我們就可以通過(guò)A窗體來(lái)完成傳參工作了://構(gòu)造傳參frmFilmManagefm=newfrmFilmManage("那些年,我們一起追過(guò)的女孩");//屬性傳參fm.FilmName="那些年,我們一起追過(guò)的女孩";//方法傳參fm.SetFilmName("那些年,我們一起追過(guò)的女孩");fm.Show();上面我們將三種實(shí)現(xiàn)方式放在了一起,究竟要采用哪種方式要根據(jù)實(shí)際情況來(lái)定。5.4.3返回傳參是將數(shù)據(jù)從A窗體傳遞到B窗體,返回則是將數(shù)據(jù)從B窗體傳遞回A窗體。這個(gè)過(guò)程實(shí)際上和傳參很相似,實(shí)現(xiàn)思路基本上是一樣的。我們依然需要在B窗體中定義一個(gè)字段,只不過(guò)現(xiàn)在為這個(gè)字段賦值的工作需要在B窗體中完成,然后通過(guò)公有成員公開(kāi)字段的值,這樣A窗體就可以讀取到字段的值了。首先在B窗體中定義一個(gè)字段:publicpartialclassfrmFilmManage:Form{//用戶(hù)存放數(shù)據(jù)的私有字段privatestringfilmName=null;//其他處理代碼}然后在程序中為該字段賦值:privatevoidbtnSave_Click(objectsender,EventArgse){filmName="那些年,我們一起追過(guò)的女孩";}接下來(lái)采用屬性或方法將字段公開(kāi)出去://屬性publicstringFilmName{get{returnthis.filmName;}set{filmName=value;}}//方法publicstringGetFilmName(){returnfilmName;}最后,在A窗體中完成取值操作:frmFilmManagefm=newfrmFilmManage();fm.ShowDialog();//方法返回txtName.Text=fm.GetFilmName();//屬性返回txtName.Text=fm.FilmName;在上面的代碼中,比較突出的是我們?cè)诖蜷_(kāi)窗體時(shí)采用了ShowDialog()方法,這是為什么呢?我們知道ShowDialog()方法打開(kāi)的是一個(gè)模式窗體,也就是用戶(hù)必須做出響應(yīng)的窗體,正因?yàn)檫@樣,所以當(dāng)程序執(zhí)行到這里的時(shí)候就會(huì)“停”下來(lái),等待用戶(hù)的響應(yīng),也就是說(shuō)這個(gè)時(shí)候如果用戶(hù)不做出響應(yīng)那么后面的代碼是不會(huì)執(zhí)行的。這樣,用戶(hù)就有時(shí)間為字段賦值,后面的取值操作才能夠成立。如果采用Show()方法,程序就不會(huì)“停”下來(lái),用戶(hù)還沒(méi)來(lái)得及為字段賦值,后面的取值操作就執(zhí)行了,自然就不可能取到值了。
5.5用戶(hù)自定義選項(xiàng)
5.5.1問(wèn)題為了推廣音像店,我們需要制作一套會(huì)員系統(tǒng)。在會(huì)員注冊(cè)的過(guò)程中,需要會(huì)員選擇自己的興趣愛(ài)好,問(wèn)題是我們很難
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版多房產(chǎn)離婚協(xié)議書(shū)-2025年度家庭財(cái)產(chǎn)分割實(shí)施流程2篇
- 二零二五年度餐飲業(yè)餐飲店裝修設(shè)計(jì)與施工服務(wù)合同2篇
- 二零二五版廣告牌廣告位租賃與廣告效果分析合同3篇
- 二零二五年度鋼板租賃及節(jié)能改造服務(wù)合同2篇
- 二零二五版房屋抵押借款合同及借款收據(jù)范本3篇
- 二零二五年度軟裝方案創(chuàng)意設(shè)計(jì)合同2篇
- 二零二五年度火鍋店原料采購(gòu)及質(zhì)量控制合同范本3篇
- 二零二五版跨境電商個(gè)人合伙退伙合同范本3篇
- 二零二五年度頂賬房買(mǎi)賣(mài)合同備案及注銷(xiāo)協(xié)議3篇
- 二零二五版綠色建筑項(xiàng)目墊資合同范本共3篇
- 《疥瘡的防治及治療》課件
- Unit4 What can you do Part B read and write (說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 2025年MEMS傳感器行業(yè)深度分析報(bào)告
- 《線(xiàn)控底盤(pán)技術(shù)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 學(xué)校對(duì)口幫扶計(jì)劃
- 倉(cāng)庫(kù)倉(cāng)儲(chǔ)安全管理培訓(xùn)課件模板
- 風(fēng)力發(fā)電場(chǎng)運(yùn)行維護(hù)手冊(cè)
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專(zhuān)題培訓(xùn)
- 河道旅游開(kāi)發(fā)合同
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書(shū)范本
評(píng)論
0/150
提交評(píng)論