版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
.z.VB最簡單入門教程-.z.目錄〔提示:按ctrl,并單擊鼠標(biāo),可以跳到相應(yīng)頁〕1.11我們需要什么31.22第二章:事件、屬性及數(shù)據(jù)類型31.33第三章:VB語言6HYPERLINK'去除
mand1.Enabled=TrueEndSub運(yùn)行程序,如圖4-5。按下“去除〞,文本框被去除,按下“復(fù)原〞,文本有被恢復(fù),許多程序中的Undo/Redo就是利用這個原理實(shí)現(xiàn)的,現(xiàn)在知道為什么存越多越好了吧。我們在把程序修改一下,把Button2刪除,Button1的Enabled屬性改為True,Caption改為“去除〞,填寫代碼:PrivateSubmand1_Click()Ifmand1.Caption="去除"ThenStoreString=Te*t1.Te*t
Te*t1.Te*t=""'去除
mand1.Caption="復(fù)原"ElseTe*t1.Te*t=StoreString
mand1.Caption="去除"EndIfEndSub同樣可以上面的功能,但是卻少用了一個控件,控件使用少的程序啟動會快些。下面的例子要更加復(fù)雜些,大家一定都用過Windows中的計(jì)算器,它是一個標(biāo)準(zhǔn)的科學(xué)計(jì)算器,利用VB我們也可以做到,只是沒有則復(fù)雜,四則運(yùn)算而已。先建立一個新的工程文件,里面包含一個Form1的窗體。然后,添加控件,包括一個Te*t框〔Te*t1〕,和17個按鈕,這17個按鈕使用的名稱都是mand1,只是Inde*屬性不同,就好象一個數(shù)組,創(chuàng)立一組按鈕的方法是,先在窗體上建立一個按鈕〔mand1〕,然后在mand1上擊鼠標(biāo)右鍵,選擇復(fù)制〔Copy〕,然后在窗體上任意部位擊右鍵,選擇粘貼〔Paste〕,系統(tǒng)會提示是否創(chuàng)立控件組,選擇“是〞,重復(fù)上面步驟,直至創(chuàng)立17個按鈕為止。各控件屬性如下表:Te*t1BackColor=&H00C0FFFF&Te*t=“0.〞mand1Inde*0――16Inde*0――9Caption=Inde*10Caption=Inde*11Caption=Inde*12Caption=Inde*13Caption=Inde*14Caption=Inde*15Caption=Inde*16Caption=“去除〞如果想改變一些其他的屬性,比方字體,可以自己定義一下Font屬性,如果相對多個控件的共同屬性進(jìn)展改變,可以在窗體上按下鼠標(biāo),拖動,把多個控件一起選定,然后對它們的共同屬性進(jìn)展修改。別看這個東西小,還費(fèi)了近我兩個小時呢,不覺大嘆手生,里面也有些地方很繞彎子,我盡量解釋清楚。在編寫程序之前,我們先來回憶一下計(jì)算器的使用。按下數(shù)字鍵在液晶屏上會出現(xiàn)數(shù)字,這是最根本的功能。第一次按下運(yùn)算鍵,再按下數(shù)字鍵,將重新輸入第二個數(shù)字,再次按下運(yùn)算鍵,將算出前兩個數(shù)的結(jié)果,然后按下數(shù)字鍵,將又重新輸入新的數(shù)字。輸入數(shù)字后,按下“等于鍵〞將仍輸出原來的數(shù)字,輸入運(yùn)算符和第二個數(shù)字后在按下“等于〞,將得到二者的結(jié)果。然后又重復(fù)第二、三步。按下“去除〞,數(shù)據(jù)被全部去除。了解了這些,我們一步一步實(shí)現(xiàn)。先實(shí)現(xiàn)數(shù)據(jù)的輸入,請看代碼。與未創(chuàng)立組的控件相比,它的事件里多了Inde*參數(shù),組里所有的對象都使用同一個事件。先在General里聲明窗體級全局變量:DimNum1,Num2AsSingle
DimStrNum1,StrNum2AsString
DimFirstNumAsBoolean'判斷是否是數(shù)字開頭因?yàn)門e*t1里是存放字符串的,所以要把輸入的數(shù)據(jù)進(jìn)展運(yùn)算,必須把字符型變量轉(zhuǎn)變?yōu)閷?shí)型變量,分別用Num1、Num2和StrNum1、StrNum2進(jìn)展存放。在Form_Load事件里給變量初賦值:Num1=0
Num2=0
StrNum1=""
StrNum2=""
FirstNum=True因?yàn)?7個按鈕使用的是同一事件,所以我們用一個SelectCase語句區(qū)分各個按鈕,雙擊任意按鈕輸入代碼:PrivateSubmand1_Click(Inde*AsInteger)SelectCaseInde*Case0To9IfFirstNumThenStrNum1=Str(Inde*)’實(shí)型轉(zhuǎn)字符型FirstNum=False’初賦值為假Else’非初賦值StrNum1=StrNum1+Str(Inde*)EndIfTe*t1.Te*t=StrNum1’<還有其他語句,等待插入>EndSelectEndSub運(yùn)行程序的話已經(jīng)可以輸入數(shù)據(jù),下面我們來處理小數(shù)點(diǎn)。在General里聲明新的變量:DimPointFlagAsBoolean'判斷是否已有小數(shù)點(diǎn)我們知道小數(shù)點(diǎn)只能輸入一次,一個數(shù)據(jù)中不能有多個小數(shù)點(diǎn)存在,所以需要一個布爾變量做判斷。在Form_Load里進(jìn)展初賦值:PointFlag=False在mand的單擊事件里接著上面輸入新的代碼:Case10IfNotPointFlagThen’如果沒有小數(shù)點(diǎn)IfFirstNumThen’如果是第一個字符StrNum1="0."
FirstNum=FalseElseStrNum1=StrNum1+"."EndIfElse’已有小數(shù)點(diǎn)E*itSub’則退出單擊事件EndIfPointFlag=True
Te*t1.Te*t=StrNum11.54-2第四章按鈕〔二〕下面會復(fù)雜一些,我們先跳過等號,而來處理四則運(yùn)算:先在General里聲明新變量:DimRunsignAsInteger'儲存運(yùn)算符號DimSignFlagAsBoolean'判斷是否已有運(yùn)算符號然后在Form_Load中進(jìn)展初賦值:Runsign=0SignFlag=False在接下的mand1_Click中繼續(xù)輸入代碼:Case12To15FirstNum=True’使下一次可以輸入新數(shù)據(jù)PointFlag=False
'復(fù)原標(biāo)記值IfSignFlagThen’前面已有運(yùn)算符未運(yùn)算CallRunElseSignFlag=True
StrNum2=StrNum1’把字符串1復(fù)制給字符串2StrNum1=""EndIfRunsign=Inde*-11‘儲存鍵入的運(yùn)算符里面運(yùn)算的局部我用了一個過程,是因?yàn)樵诎聪碌忍枙r還會調(diào)用到運(yùn)算過程,這樣可以減少代碼的輸入,也使程序便于瀏覽。建立過程〔Procedure〕,可以在General局部直接輸入,也可以通過菜單里的“AddProcedure〞添加。Run的代碼如下:SubRun()Num1=Val(StrNum2)
Num2=Val(StrNum1)SelectCaseRunsignCase1’equal=Num1+Num2Case2’equal=Num1-Num2Case3’equal=Num1*Num2Case4’equal=Num1/Num2EndSelectStrNum2=Str(equal)
StrNum1=StrNum2
Te*t1.Te*t=StrNum2EndSub下面是其余的代碼:〔在mand1_Click事件里,接著寫)Case11IfNotSignFlagThenTe*t1.Te*t=StrNum1
equal=Val(StrNum1)
FirstNum=True
PointFlag=FalseElseCallRun
SignFlag=FalseEndIfCaseElse’去除按鈕CallClearData里面又用到了一個ClearData過程,實(shí)際上就是Form_Load里的變量初賦值,代碼如下:SubClearData()Num1=0
Num2=0
StrNum1=""
StrNum2=""
FirstNum=True
PointFlag=False
Runsign=0
SignFlag=False
Te*t1.Te*t="0."EndSub這樣完整的程序就完成了,本章介紹了VB的第一個控件――按鈕,并且舉例,希望你繼續(xù)看下一章――菜單。下面給出完整的程序代碼:DimNum1,Num2AsSingleDimStrNum1,StrNum2AsStringDimFirstNumAsBoolean'判斷是否是數(shù)字開頭DimPointFlagAsBoolean'判斷是否已有小數(shù)點(diǎn)DimRunsignAsInteger'儲存運(yùn)算符號DimSignFlagAsBoolean'判斷是否已有運(yùn)算符號SubClearData()Num1=0Num2=0StrNum1=""StrNum2=""FirstNum=TruePointFlag=FalseRunsign=0SignFlag=FalseTe*t1.Te*t="0."EndSubSubRun()Num1=Val(StrNum2)Num2=Val(StrNum1)SelectCaseRunsignCase1equal=Num1+Num2Case2equal=Num1-Num2Case3equal=Num1*Num2Case4equal=Num1/Num2EndSelectStrNum2=Str(equal)StrNum1=StrNum2Te*t1.Te*t=StrNum2EndSubPrivateSubabout_Click()MsgBo*"Createby周曉陽。1998/7/27",vbDefaultButton1,"VB教程第四章例"EndSubPrivateSubmand1_Click(Inde*AsInteger)SelectCaseInde*Case0To9IfFirstNumThenStrNum1=Str(Inde*)FirstNum=FalseElseStrNum1=StrNum1+Str(Inde*)EndIfTe*t1.Te*t=StrNum1Case10IfNotPointFlagThenIfFirstNumThenStrNum1="0."FirstNum=FalseElseStrNum1=StrNum1+"."EndIfElseE*itSubEndIfPointFlag=TrueTe*t1.Te*t=StrNum1Case12To15FirstNum=TruePointFlag=False'復(fù)原標(biāo)記值IfSignFlagThenCallRunElseSignFlag=TrueStrNum2=StrNum1StrNum1=""EndIfRunsign=Inde*-11Case11IfNotSignFlagThenTe*t1.Te*t=StrNum1equal=Val(StrNum1)FirstNum=TruePointFlag=FalseElseCallRunSignFlag=FalseEndIfCaseElseCallClearDataEndSelectEndSubPrivateSubForm_Load()CallClearDataEndSub補(bǔ)充說明按鈕還有兩個重要的屬性Default〔默認(rèn)屬性〕和Cancel〔取消屬性〕,兩個屬性都以布爾賦值,把Default設(shè)為True,則在按下回車鍵時,不管焦點(diǎn)處于何處,都會觸發(fā)該按鈕的Click事件,而當(dāng)Cancel屬性被設(shè)為True,在按下ESC鍵時,該按鈕的Click屬性發(fā)生。下面舉個例子:建立一個新窗體和兩個按鈕,Name屬性分別為cmdOK和cmdCancel,把前者的Default設(shè)為True,后者的Cancel設(shè)為True,Caption屬性分別為OK和Cancel。如圖4-8。填寫代碼后運(yùn)行:PrivateSubcmdCancel_Click()MsgBo*"Cancel按鈕被按下",vbDefaultButton1,"提示"EndSubPrivateSubcmdOK_Click()MsgBo*"OK按鈕被按下",vbDefaultButton1,"提示"EndSub結(jié)果如圖4-9、4-10:快捷鍵大家一定都知道,在VB如何實(shí)現(xiàn)呢。其實(shí)很簡單,在剛剛的例子里在建立一個按鈕mand1,把它的Caption屬性設(shè)為Click&ME,如圖4-11,在M的下面有一條下劃線,運(yùn)行程序,當(dāng)你按下Alt+M的時候就觸發(fā)了mand1_Click事件:PrivateSubmand1_Click()MsgBo*"ClickME按鈕被按下",vbDefaultButton1,"提示"EndSub據(jù)我所知,有許多用戶有使用快捷鍵的習(xí)慣,注意細(xì)節(jié)上的問題能夠使將來你的程序得到更多人的欣賞,不是嗎?1.65第五章菜單我們經(jīng)常在Windows操作里遇到各種各樣的菜單,菜單的操作把各種命令構(gòu)造化、分分類化,也節(jié)省了命令所占的空間,從作用上來講,菜單類似于按鈕,但它只有一個事件――Click。VB作為Windows下的可視編程工具,菜單的設(shè)計(jì)當(dāng)然很容易實(shí)現(xiàn),VB3.0按下Ctrl+M,VB4.0以上的版本請按下Ctrl+E,便可呼叫出菜設(shè)計(jì)的窗口,無論VB的版本,這個窗口的樣式是小異的,請見圖5-1。前面說過,菜單相當(dāng)于簡單的按鈕,它有幾個屬性,其中的大局部我們都曾經(jīng)見過,包括Name、Caption、Inde*、Checked、Enabled、Visible、快捷鍵和熱鍵等等。其中Name是必須的。下面請跟我一起設(shè)計(jì)第一個菜單。首先在Caption添入“文件〞,Name為“mnuFile〞,按下Ne*t按鈕,這樣就建立了第一級菜單,注意菜單設(shè)計(jì)窗口的左中有四個箭頭,按下向右的箭頭,出現(xiàn)了一排小點(diǎn),如圖5-2,在VB里這叫縮排,這樣就可以開場建立第二級菜單。小知識:實(shí)際上我們在生活就中經(jīng)常用到縮排,寫文章時開頭要空兩格就是一種縮排,在編寫程序時更需要縮排,這樣使程序構(gòu)造化,便于觀察,當(dāng)然菜單設(shè)計(jì)里的縮排有更多的用處。接著填寫下一菜單項(xiàng),Caption為“新文件〞,Name為“mnuFileNew〞,按下Ne*t鍵。小知識:VB一共如許建立6級子菜單,如圖5-3,盡量不要建立這樣的菜單,要知道藏在越深處的菜單項(xiàng)越難以被人發(fā)現(xiàn),一個友好的程序界面應(yīng)該讓用戶馬上找到需要的命令。接著重復(fù)以上步驟,創(chuàng)立以下三個菜單項(xiàng):Caption保存NamemnuFileSaveLevel1Caption另存為NamemnuFileSaveAsLevel1Caption載入NamemnuFileLoadLevel1我們在菜單里還經(jīng)??吹桨巡煌?xiàng)分開的分隔條,在VB里也很容易做到,把Caption設(shè)為“-〞〔減號〕,Name為mnuBar1。最后增加這個菜單條的最后一項(xiàng),Caption為“退出〞,Name為mnuFileE*it?,F(xiàn)在可以退出菜單設(shè)計(jì)窗口,菜單如圖5-4。怎么樣,經(jīng)過幾章的學(xué)習(xí),是不是覺得Windows世界也不是則神秘?也對,也不對。確實(shí),我們很輕易的實(shí)現(xiàn)了這么多的功能,但如果你仔細(xì)想想,我們的程序還什么也不會做呢!可以說是徒有其表,要實(shí)現(xiàn)強(qiáng)大的功能,恐怕要學(xué)很長很長時間,而現(xiàn)在僅僅是個開頭,并不是想入非非的時候,我們還要繼續(xù)努力!現(xiàn)在再次按下Ctrl+E,重回菜單設(shè)計(jì)窗口,接著添加菜單?!舶聪孪蜃蟮募^,可以使菜單上升一級,Level代表菜單的級別〕,根據(jù)下表添加新的菜單項(xiàng):Caption編輯NamemnuEditLevel0Caption剪切NamemnuEditCutLevel1Short-CutCtrl+*Caption復(fù)制NamemnuEditCopyLevel1Short-CutCtrl+CCaption粘貼NamemnuEditPasteLevel1Short-CutCtrl+VCaption關(guān)于NamemnuAboutLevel0其中Short-Cut就是平常我們說的熱鍵,你可以在菜單設(shè)計(jì)窗口中找到,設(shè)置一個你需要的組合鍵,這樣不管窗口的焦點(diǎn)處于何處,菜單在第幾層,只要按下熱鍵,就相當(dāng)于調(diào)用了該項(xiàng)的Click事件。結(jié)果如圖5-5。從Win95以來程序里引入了鼠標(biāo)右鍵功能,使鼠標(biāo)有了更大的用處,在VB里我們也很容易實(shí)現(xiàn)。翻開Form_MouseDown事件,該事件有兩個參數(shù):Button,當(dāng)按下左鍵時Button返回1,當(dāng)按下右鍵時Button返回2,;Shift,是指在點(diǎn)擊鼠標(biāo)時按下的鍵盤鍵,如Shift、Ctrl、Alt,這些我們將在以后討論,但很難防止在一章中不涉及到不該涉及的容,學(xué)習(xí)時有個大概的理解即可。下面在該事件里添加代碼〔效果如圖5-6〕:PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,*AsSingle,YAsSingle)IfButton=2ThenPopupMenumnuEdit,vbPopupMenuLeftAlignElseE*itSubEndIfEndSub在上面的代碼中我們用到了PopupMenu方法,它的語法是:object.PopupMenu菜單名,標(biāo)記,*坐標(biāo),Y坐標(biāo)標(biāo)記是用來說明彈出菜單位于鼠標(biāo)指針位置的,它有三個值:vbPopupMenuLeftAlign位于鼠標(biāo)左vbPopupMenuRightAlign位于鼠標(biāo)右VbPopupMenuCenterAlign位于鼠標(biāo)中部*、Y值可以用來制定菜單彈出的位置,可以省略。關(guān)于菜單的Visible、Enabled等屬性請自己嘗試。1.76-1第六章輸入〔一〕我們?yōu)槭裁匆O(shè)計(jì)計(jì)算機(jī)程序呢,當(dāng)然是為了計(jì)算機(jī)能為我們完成工作,但是要完成不同的任務(wù),我們就必須對計(jì)算機(jī)下達(dá)命令,然后計(jì)算機(jī)在把信息返饋回來――任務(wù)是否完成。以上就是所謂的人機(jī)對話或交互功能,尤其是在Windows操作里我們需要進(jìn)展更多的輸入工作,我們需要填寫各種各樣的表格,設(shè)置程序的重要參數(shù),把數(shù)據(jù)輸入給計(jì)算機(jī),再又它完成既定的工作就是今天我們本章要重點(diǎn)討論的問題――在VB中如何建立完整的輸入機(jī)制。在VB中提供了一個函數(shù)InputBo*能幫助我們建立一個最簡單的輸入窗體,語法如下:InputBo*〔prompt[,title][,default][,*pos][,ypos][,helpfile,conte*t]〕該函數(shù)返回一個字符串表達(dá)式,其參數(shù)含義為:〔“[]〞表示可缺省〕prompt――字符串表達(dá)式,最大長度為1024字符,窗體上的提示局部。Title――字符串表達(dá)式,顯示標(biāo)題欄里的文本。Default――字符串表達(dá)式,窗體中文本框的缺省值。*pos,ypos――數(shù)值表達(dá)式,以Twips為單位指定窗體出現(xiàn)在屏幕上的位置。helpfile――字符串表達(dá)式,是幫助文件的完整路徑。Conte*t――數(shù)值表達(dá)式,指定適合的幫助主題??赡苣憧戳松厦娴恼f明并不明白,則下面我們就用Input語句完成一個最簡單的程序。小知識:屏幕坐標(biāo)在計(jì)算機(jī)的屏幕上也有一個類似于我們在中學(xué)里常用到的直角坐標(biāo)系,之不過它的原點(diǎn)不在左下,而是在屏幕的右上角,屏幕的最右上方坐標(biāo)為〔0,0〕,它的橫坐標(biāo)和我們的習(xí)慣是一致的,而縱坐標(biāo)則是越向下越大,不僅是屏幕,所有的對象里都是一樣,需要記清。見圖6-1新建一個工程〔project〕,在Form_load里填寫一行代碼:a$=InputBo*("舉薦你最欣賞的","最正確投票","VB小驛")’按下F5運(yùn)行程序,在Form1出現(xiàn)之前先會彈出一個輸入對話框,如圖6-2。這時,無論你按下OK還是Cancel都是沒有區(qū)別的,因?yàn)槲覀儾]有對輸入數(shù)據(jù)進(jìn)展處理,下面我們完成一個更加復(fù)雜些的程序。新建一個工程文件,把窗口布局成類似于圖6-3的構(gòu)造,各對象屬性如下表:Form1Caption“最正確投票演示〞BorderStyle3’ControlBo*0’Frame1Caption“輸入框?qū)傩浴癓abel1Autosize1’Inde*0至50至5Caption“提示語句〞“標(biāo)題〞“缺省〞“*坐標(biāo)〞“Y坐標(biāo)〞“〞Inde*4EnabledFalseInde*4EnabledFalseTe*t1Te*t“〞’〔空字符串〕Inde*0至4Inde*3Te*t0Inde*4Te*t0Check1Caption“指定輸入框位置〞Button1Inde*0,1Inde*0Caption“顯示輸入框〞1Caption“退出程序〞本例中出現(xiàn)了一個Frame1控件,它是一種框架,可以用來把窗體分成好幾個局部,首先應(yīng)該在窗體上畫出Frame1控件,然后再選擇相應(yīng)的控件,在Frame1上描出輪廓,使其是出現(xiàn)在Frame1之上,本例中除去兩個按鈕,其余都在Frame1上面。本例中用到了幾組控件數(shù)組,其創(chuàng)立方法是,在選定的點(diǎn)右鍵,選擇Copy,再在窗體其他部位單擊右鍵,選擇Paste即可,注意,假設(shè)要使粘貼的對象在Frame1上,請?jiān)贔rame1上單擊右鍵選擇Paste。我們通過這個窗體,對輸入框進(jìn)展完整的控制,原理是這樣的:當(dāng)我們把窗體中要填寫的對輸入框的參數(shù)完成后按下OK按鈕,就會出現(xiàn)我們設(shè)計(jì)的那個輸入框,我們從輸入框退出時則返回我們投票的結(jié)果,代碼如下.窗體初次被裝入時,Label1(3)、Label(4)和Te*t1(3)、Te*t1(4)的Enabled屬性都是False,我們需要通過改變Check1的Value〔1,被選中,0,未選中〕使他們有效或無效。聲明全局變量〔General〕:DimPosChkAsBoolean'檢查*、Y坐標(biāo)是否有效Check1_Click事件:PrivateSubCheck1_Click()IfCheck1.Value=1ThenLabel1(3).Enabled=TrueLabel1(4).Enabled=TrueTe*t1(3).Enabled=TrueTe*t1(4).Enabled=TruePosChk=TrueElseLabel1(3).Enabled=FalseLabel1(4).Enabled=FalseTe*t1(3).Enabled=FalseTe*t1(4).Enabled=FalsePosChk=FalseEndIfEndSub接著在按鈕中填寫代碼:PrivateSubmand1_Click(Inde*AsInteger)DimPrompt,Title,DefaultAsStringDim*Pos,yPosAsIntegerSelectCaseInde*Case0Prompt=Te*t1(0).Te*tTitle=Te*t1(1).Te*tDefault=Te*t1(2).Te*tIfPosChkThen*Pos=Val(Te*t1(3).Te*t)yPos=Val(Te*t1(4).Te*t)a$=InputBo*(Prompt,Title,Default,*Pos,yPos)Elsea$=InputBo*(Prompt,Title,Default,*Pos,yPos)EndIfLabel1(5).Caption="您的投票,您的選擇是"&a$&"!"Case1UnloadMeEndSelectEndSub按下F5運(yùn)行程序,你會看到這樣的結(jié)果。圖6-4,6-5。是不是有種受騙的感覺,啊喲喲,可不是我的錯,就是這么容易嘛!從剛剛的例子里,我們接觸了一些VB中的輸入方法,其實(shí)數(shù)據(jù)輸入不僅僅局限于向Te*t框中輸入數(shù)據(jù),數(shù)據(jù)的輸入還有許多其他的方法,譬如前面的Check1也是向程序發(fā)出一定的信息,只要是通過操作向計(jì)算機(jī)發(fā)布命令就可以叫做輸入,下面我們來一一介紹。首先要介紹的當(dāng)然是輸入用到最多的Te*t框。Te*t沒有Click事件,它的缺省事件是Change,也就是當(dāng)Te*t框里的一旦容改變就會激發(fā)該事件發(fā)生,還是讓我們用實(shí)例說話吧。Te*t有幾個特殊的屬性,一是MultiLine〔多行〕屬性,MultiLine屬性為False的時候,不管文本有多長,它都會在一行里顯示下去,換行符無效,當(dāng)它為True的時候,字符串顯示到Te*t框邊緣的時候就會自動換行。另一個與之配合的屬性是ScrollBars屬性,它有4個值,0到3,分別是沒有滾動條,水平滾動條,垂直滾動條,和二者都有,它是一個只讀屬性,也就是說只有在程序設(shè)計(jì)過程中才能改變,而不能在程序運(yùn)行中改變,但是我們可以通過API解決運(yùn)行中改變的問題,我們放在以后再講。PasswordChart屬性,我們經(jīng)常在程序操作中遇到要填寫密碼的局部,為了起見,在屏幕上顯示的字符一般“*〞表示,并且這時是無法用剪貼板的,這在VB中非常容易做到,把PasswordChart中設(shè)一個用來代替字符串的字符即可,并不一定是“*〞哦。下面我們完成一個有趣的小程序,是我以前遇到過的一個程序,我對其進(jìn)展了局部修改。程序的意思是這樣的,假設(shè)你是一個司機(jī)因超速被警察拘留,現(xiàn)在需要你向警察述你的理由,如果你的話能打動他,就可以免交罰金,如果你在規(guī)定的字?jǐn)?shù)里沒有說出什么有震撼力的話,那老兄你可就慘了,交錢吧。J這個程序比原來的英文程序有了幾點(diǎn)不同,第一,由于用到的是雙字節(jié)中文的中文,所以對于檢測中文字符和英文有很大不同,第二,原來的英文程序不管你說多少,警察依然是依法從事,本例中給了犯規(guī)者10%的免罰時機(jī)〔有點(diǎn)無聊……L,不過也是為了學(xué)一些東東嘛〕。下面就跟我來設(shè)計(jì)窗體吧。〔如圖6-6〕Form1IconStop圖標(biāo)Caption停車檢查BorderStyle3Label1Caption警官,我超速是有原因的,請聽我說:BackColor&H00808080&ForeColor&H80000012&Label2Caption你必須在30字之完成你理由的申訴,否則將受到罰款!BackColor&H00808080&ForeColor&H00FF0000&Te*t1MultiLinkTrueTe*t“〞Picture1AutosizeTrueBackColor&H00808080&VisibleTruePicture2AutosizeTrueBackColor&H00808080&VisibleFalsePicture3AutosizeTrueBackColor&H00808080&VisibleFalsemand1VisibleFalse三個圖片框Picture1-3的Picture屬性分別為綠燈,黃燈和紅燈,這些圖標(biāo)在VB目錄下的Graphics\Icons\Traffic下〔VB5〕,或是VB目錄下的Icons\Traffic下〔VB4、VB3〕,你還可以為Label1在Font屬性里選一個適宜的字體和字重。下面我們來看代碼:首先初始化程序:PrivateSubForm_Load()'把mand1放在水平的中央mand1.Top=Label2.Top+200mand1.Left=(Form1.Width-mand1.Width)/2'重疊三個圖片框Picture2.Left=Picture1.LeftPicture2.Top=Picture1.TopPicture3.Left=Picture1.LeftPicture3.Top=Picture1.TopEndSub下面我來講一講程序是怎樣運(yùn)行的,我們將用到Te*t的Change事件,每當(dāng)字符串改變一次就對它進(jìn)展一次檢查,算出已經(jīng)說的字?jǐn)?shù),當(dāng)字?jǐn)?shù)超過10時,下面的紅綠燈會變成黃色,并且在這時隨機(jī)抽取一個數(shù),它在一個圍出現(xiàn)的可能是10%,如果在這個圍就可以免交罰金,如果不在圍則繼續(xù),當(dāng)文字超過20的時候,紅綠燈會變成紅色,再一次抽取隨機(jī)數(shù)字,步驟同上,如果30個字已滿,再進(jìn)展一次檢查,如果你真的則不幸就該罰款了。程序的步驟清楚了,我們在來看看程序的要點(diǎn)。由于中文是雙字節(jié)字符,也就是說一個漢字占兩個ASC碼的位置,而VB顯然是為英語國家設(shè)計(jì)的用Len函數(shù)無法返回漢字字節(jié),也就是說一個漢字和和一個ASC字符在Len函數(shù)中得到的值是一樣的,這就需要特殊處理。用Asc〔〕函數(shù),在括號放入一個ASC字符或字符串,它會把第一個ASC碼轉(zhuǎn)化為0-255的數(shù)值,而把一個漢字放入,它的值必然不在0-255,這也就可以作為判定漢字的根底。我們可以把英文算作半個漢字。第六章第二局部1.86-2第六章輸入〔二〕下面我們來看看代碼:在General里聲明窗體級變量:DimLevelAsIntegerPrivateSubmand1_Click()UnloadMeEndSubPrivateSubTe*t1_Change()DimStrLengthAsInteger’字符串長度DimRandomNumAsSingle’隨機(jī)數(shù)DimStr1AsStringDimaAsStringDimi,TempStrLength=0’a=Te*t1.Te*tFori=1ToLen(a)’Len(a)代表字符串的長度Temp=Asc(Mid$(a,i,1))’挨個取字符IfTemp>255OrTemp<0Then’不是ASC碼StrLength=StrLength+2ElseStrLength=StrLength+1EndIfNe*tiStrLength=StrLength/2SelectCaseStrLengthCase0To9Picture1.Visible=TruePicture2.Visible=FalsePicture3.Visible=FalseLabel2.Caption="慢慢說。你還有"&Str(30-StrLength)&"個字可以說"Level=1Case10To19IfLevel=1ThenRandomNum=Rnd*10’IfRandomNum<=10AndRandomNum>9ThenTe*t1.Enabled=FalseLabel2.Caption="很抱歉這是個誤會……"mand1.Visible=Truemand1.Caption="您可以離開了"EndIfLevel=2ElsePicture1.Visible=FalsePicture2.Visible=TruePicture3.Visible=FalseStr1="怎么還沒說完!"Label2.Caption=Str1&"你還有"&Str(30-StrLength)&"個字可以說"EndIfCase20To29IfLevel=2ThenRandomNum=Rnd*10IfRandomNum<=10AndRandomNum>9ThenTe*t1.Enabled=FalseLabel2.Caption="很抱歉這是個誤會……"mand1.Visible=Truemand1.Caption="您可以離開了"EndIfLevel=3ElsePicture1.Visible=FalsePicture2.Visible=FalsePicture3.Visible=TrueStr1="我已經(jīng)不耐煩了!"Label2.Caption=Str1&"你還有"&Str(30-StrLength)&"個字可以說"EndIfCaseElseTe*t1.Enabled=FalseLabel2.Caption="你已經(jīng)沒有時機(jī)了!"mand1.Visible=Truemand1.Caption="交錢吧,肇事犯!"EndSelectEndSub中間有幾個函數(shù)需要解釋一下:Mid可以從字符串中取出一局部,返回字符型,格式:Mid(字符串,從第幾個字符開場,取字符的長度)Asc可以把字符轉(zhuǎn)換為ASCII碼,格式:Asc(字符串)Rnd,取得大于0但小于1的數(shù)值,可以沒有參數(shù)。怎么樣,十分簡單吧,我們將在下一次繼續(xù)討論VB的輸入機(jī)制!在繼續(xù)上面的容時,我想再回憶和強(qiáng)調(diào)幾個在字符串操作中經(jīng)常函數(shù):先是幾個已經(jīng)接觸過的,Mid(),Asc(),Len(),它們的語法分別是:Mid(字符型,起始字符,長度)返回子字符串,如果從字符串的第一個字符取起,起始字符為1,依此類推。Asc(字符型)返回?cái)?shù)值,如果參數(shù)不是一個字符,而是字符串〔多個字符〕,將返回參數(shù)的第一個字符ASCII值。Len(字符型)返回字符串的長度。下面我再為你解釋幾個新的函數(shù):Left(字符串,長度)將返回字符型,從字符串的第一個字符向左取字符串,與之相對應(yīng)的是Right(),它將從字符串的最后一個字符向右取字符串。Chr(數(shù)值型)該數(shù)值圍從0-255,返回字符型,如Chr(65)可返回字符“A〞,這樣可以輸入一些用鍵盤無法輸入的字符。Str(數(shù)值型)該函數(shù)把數(shù)值型轉(zhuǎn)換為字符型,也許你覺得數(shù)值“123〞和字符串“123〞沒什么區(qū)別,但在存中一個ASCII字符是占一個字節(jié),也就是說字符串“123〞占3個字節(jié),而當(dāng)數(shù)值“123〞是整型時,它占兩個字符,當(dāng)它是長整型時,占4個字節(jié)。與之向?qū)?yīng)的是Val(數(shù)值型),它把數(shù)值型轉(zhuǎn)換為字符型。上面的函數(shù)都是以后要經(jīng)常用到的,請將它們熟悉。上次講到文本框的用處,還有意思嗎?你是否能把上次的程序稍稍變動一下,來計(jì)算出輸入的單詞數(shù),提示一下,單詞與單詞之間是用空格分隔開的。輸入不僅僅是向文本框輸入字符,但凡從外界向程序傳遞數(shù)據(jù)都可以叫做輸入,我們一一說明白。無線鈕,記得我們曾在第一章中完成過我們的第一個程序――“HelloWorld!〞它就是一種輸入的方法,在設(shè)計(jì)VB程序時可以通過一組這樣的無線鈕,它們之間互相排斥,也就是說,只能有一個按鈕被選中。它因?yàn)楹芟鬅o線電收音機(jī)上的按鈕因而得名無線鈕。如果要在一個窗體放置多組無線鈕必須用Frame控件把它們區(qū)分開來。下面我們在來完成一個例子,順便熟悉一下另外兩個處理字符串的函數(shù)――LTrim()和Rtrim(),它們分別用來刪除字符串左邊的空格和右邊的空格,讓我們看看它們是如何工作的。程序窗體如圖6-8,由于窗體比擬簡單,無需修改更多的屬性,一共有三個文本框〔Te*t1到3〕,分別用來顯示輸入字符,顯示把空格換成星號的字符,和經(jīng)過處理的字符,還有三個無線鈕〔Option1到3〕,要修改的只有Caption屬性,分別是“刪除左邊的空格〞、“刪除右邊的空格〞和“刪除兩邊的空格〞。因?yàn)榭崭裨谖覀冊谖谋究蛑袩o法看到空格,所以我們通過一個稱作AddStar的函數(shù)把原有字符串中的空格轉(zhuǎn)換為星號,使我們能夠看到函數(shù)的效果。下面在程序中添加代碼,首先在General中聲明窗體級變量:DimLTrimmedword$,RTrimmedword$'刪除左邊空格和右邊空格后的字符串DimLRTrimmedword$'刪除兩邊空格后的字符串然后,我們通過一個叫做addstar的函數(shù)為字符串加上星號,以前曾說過函數(shù)與過程的分別,函數(shù)會返回一個函數(shù)值,所以addstar也就相當(dāng)于一個變量,其實(shí)這很好理解,就象中學(xué)代數(shù)中的函數(shù),函數(shù)就相當(dāng)于變量Y,而函數(shù)中的參數(shù)則相當(dāng)于自變量*,當(dāng)然可能有很多自變量*1、*2……請?jiān)?,我并不想在這里上數(shù)學(xué)課,因?yàn)槲覅拹耗峭嬉鈨?,特別是上了大學(xué)之后,好在大二以后就再也不會有數(shù)學(xué)課了,哈哈……Functionaddstar(tempwordAsString)AsStringDimcharinde*%Dimpasteword$'加星號后的字符串Forcharinde*=1ToLen(tempword)IfMid(tempword,charinde*,1)=""Then'如果字符為空格pasteword=pasteword+"*"Else:pasteword=pasteword+Mid(tempword,charinde*,1)
EndIfNe*taddstar=pasteword'返回函數(shù)值EndFunction下面的代碼很簡單,并且我為它做了注釋,就不再一一解釋了,我只想簡要的提幾句,Ltrim和Rtrim只有一個參數(shù)〔字符型〕,另外下面用到了焦點(diǎn)事件,我們曾在第三章中介紹過,當(dāng)Te*t1得到焦點(diǎn)〔GotFocus〕時,清空所有的文本框,當(dāng)它失去焦點(diǎn)〔LostFocus〕時,對字符進(jìn)展addstar并且在Te*t2中顯示。PrivateSubTe*t1_GotFocus()'但焦點(diǎn)于Te*t1'去除所有文本框中的字符Te*t1.Te*t=""
Te*t2.Te*t=""
Te*t3.Te*t=""EndSubPrivateSubTe*t1_LostFocus()DimOrigionwordAsString
Origionword=Te*t1.Te*t
Te*t2.Te*t=addstar(Origionword)
LTrimmedword=addstar(LTrim(Origionword))
RTrimmedword=addstar(RTrim(Origionword))
LRTrimmedword=LTrim(RTrim(Origionword))EndSubPrivateSubOption1_Click()Te*t3.Te*t=LTrimmedword'顯示刪除左空格后的字符串EndSubPrivateSubOption2_Click()Te*t3.Te*t=RTrimmedword'顯示刪除右空格后的字符串EndSubPrivateSubOption3_Click()Te*t3.Te*t=LRTrimmedword'顯示刪除兩邊空格后的字符串EndSub最后結(jié)果如圖6-9。與無線鈕相對的是檢查框,在同一圍一組無線鈕只能有一個被選中,而檢查框則可以有多個選擇,就象在添表時,性別那項(xiàng)只能有一個選擇,而在描述你以前的職業(yè)時可以有學(xué)生、程序員、家庭教師或者什么,總之有很多項(xiàng)選擇擇,下面我們舉一個簡單的例子加以說明。假設(shè)編寫了一個共享軟件,在讓用戶注冊的時候你想知道你的用戶使用的計(jì)算機(jī)情況,你就需要一個調(diào)查表,為了使這個調(diào)查表不止枯燥,可以在這個程序中參加一些圖形。新建一個工程文件,窗體布局如圖6-10。程序很簡單,一共有兩個框架〔Frame1和Frame2〕,它們的Caption分別為“選擇你的計(jì)算機(jī)擁有的配置〞和“這是你的計(jì)算機(jī)系統(tǒng)〞,在Frame1有四個檢查框〔Check1到Check4〕,Caption分別為“網(wǎng)絡(luò)系統(tǒng)〞、“鼠標(biāo)〞、“密碼保護(hù)〞和“電子〞,另把Check4的Enabled屬性改為False,使其無效;在Frame2中放置四個圖片框〔Picture1到Picture4〕與四個檢查框向?qū)?yīng),請把所有圖片框的BorderStyle屬性設(shè)為0〔無邊框〕,它們的Picture屬性請根據(jù)上圖,在存放圖標(biāo)的目錄中找到相對的圖標(biāo)。下面是程序代碼:PrivateSubCheck1_Click()IfCheck1.ValueThenCheck4.Enabled=-1
Picture1.Visible=-1Else:Check4.Enabled=0
Picture1.Visible=0
Check4.Value=0
Picture4.Visible=0EndIfEndSubPrivateSubCheck2_Click()IfCheck2.ValueThenPicture2.Visible=-1Else:Picture2.Visible=0EndIfEndSubPrivateSubCheck3_Click()IfCheck3.ValueThenPicture3.Visible=-1Else:Picture3.Visible=0EndIfEndSubPrivateSubCheck4_Click()IfCheck4.ValueThenPicture4.Visible=-1Else:Picture4.Visible=0EndIfEndSub這個程序比我們見過的任何程序都簡單,就不再做說明。1.96-3VB入門教程之六第六章輸入〔三〕滾動條〔ScrollBar〕在視窗中也是一個不可缺少的局部,由于面積所限,我們不得把屏幕上的容滾來滾去,以顯示大量的容,這就是我們經(jīng)常要用到的滾動條。但滾動條除去滾動窗口,還有一個很重要的作用――輸入,想想你經(jīng)常用到的一些家用電器上調(diào)節(jié)聲音或別的什么東西的滑塊,你把它滑向大的一方音量就會增大,而你把它滑向小的一方音量就會減小,或者一個控制左右兩個音箱的均衡器,當(dāng)滑塊在正中央的時候,兩個音箱的音量是一樣的,當(dāng)你把滑塊偏向一方時,音箱的音量有了大小之分,在Windows操作中,我們也經(jīng)常要用到類似的效果。在VB中提供了兩個常規(guī)的滾動條控件――Vscroll和Hscroll,分別代表垂直的和水平的滾動條,它們只不過是方向不同而已,而它們的屬性,以及會發(fā)生的事件都是一樣的。,滾動條有幾個特殊的屬性:Value屬性,當(dāng)滑塊挪動后停在*一位置時,就改變了滾動條的Value屬性。Ma*和Min屬性,用來設(shè)置滾動條的最大值和最小值,譬如把Ma*設(shè)為100,把Min設(shè)為0時,滾動條的Value就在0到100之間移動,當(dāng)Ma*和Min倒置時,滾動條的方向也會相反,也就是說,當(dāng)Ma*<Min時,原來Value增加的方向就會變成相反的方向。Ma*和Min也可設(shè)為負(fù)值。SmallChange和LargeChange屬性,當(dāng)鼠標(biāo)在滾動條兩頭的箭頭上單擊時,就會把滾動條向相應(yīng)的方向挪動一點(diǎn),這時用到的就是SmallChange屬性,當(dāng)你把它設(shè)為1時,每點(diǎn)一下,滾動條的Value就改變1;當(dāng)鼠標(biāo)在滾動條上點(diǎn)擊時,用到的就是LargeChange,當(dāng)設(shè)為10時,每點(diǎn)擊一下滾動條,Value就改變10。下面我們看一個實(shí)例。大家都知道,物體之所以會有顏色是因?yàn)槲矬w外表的材料吸收了太中的局部色光,而還有局部色光沒被吸收而被反射回來,它就成了我們看到的顏色,黑色就是物體吸收了所有的太的所有色光,沒有反射顏色,所以在我們看來是黑的,而當(dāng)物體反射了所有的色光,我們看到的就是白色。在計(jì)算機(jī)中,顏色的表示就是象我們剛剛描述的樣子,它把顏色分為紅〔R〕、綠〔G〕和藍(lán)〔B〕。眾所周知,計(jì)算機(jī)的機(jī)器語言是使用二進(jìn)制表示的,為了方便查閱我們看到的往往是十六進(jìn)制代碼,一個字節(jié)包括兩位十六進(jìn)制數(shù)字,從0-255〔十六進(jìn)制表示0-FF〕,而一個字節(jié)是由八位二進(jìn)制數(shù)值表示〔2^8,2的8次方〕,計(jì)算機(jī)中用分別用一個字節(jié),也就是八位表示一種顏色,和在一起也就是三個字節(jié)〔24位〕表示所有的顏色,這就是我們平時常說的24位真彩,它一共可以組成256×256×256〔2^24〕種顏色,對于我們的肉眼,是根本分辨不出來相鄰兩個不同的顏色的,比方用FFFFFF表示白色,就好象我們剛剛說的物體反射了所有的色光,相反的可以用000000表示黑色,它吸收了所有的色光,還可以用FF0000表示紅色,在HTML語言中就是這樣表示顏色的。小知識:現(xiàn)在你可以根據(jù)你的顯卡的顯存來計(jì)算一下顯卡在24位真彩下可以以多大的分辨率顯示,計(jì)算是這樣的,用顯存的字節(jié)數(shù)÷3〔24位色〕=顯示器寬的象素?cái)?shù)×顯示器高的象素?cái)?shù),寬的象素?cái)?shù):高的象素?cái)?shù)=4:3,比方4兆顯存,就應(yīng)該是4×1024×1024÷3=1365×1024。在下面的小程序中,我們通過三個滾動條分別代表R、G、B,滾動滾動條,將在右邊的圖片框中顯示相應(yīng)的顏色,并且在下面的文本框中顯示顏色的十六進(jìn)制數(shù)值?,F(xiàn)在,新建一個工程文件,在Form1中如圖6-12布局控件,各控件屬性如下表:HsrollBarNameHscroll1Inde*0、1、2〔共同屬性〕Ma*255Min0LargeChange10SmallChange1LabelNameLabel1Inde*0、1、2Inde*0Caption“紅:〞Inde*1Caption“綠:〞Inde*2Caption“藍(lán):〞LabelNameLabel2Caption“顏色值〞Te*tBo*NameTe*t1Te*t“〞PictureBo*NamePicuture1為了把十進(jìn)制數(shù)值換成十六進(jìn)制數(shù)值,要使用一個叫做He*〔〕的函數(shù),它把十進(jìn)制數(shù)值轉(zhuǎn)化為十六進(jìn)制的字符,但對于只有一位的十六進(jìn)制字符,這個函數(shù)并不在高位補(bǔ)零,為了視覺上的正確,我設(shè)計(jì)了一個小函數(shù)幫助它給一位的十六進(jìn)制字符補(bǔ)零.程序代碼很簡單,見下:DimRedStr,GreenStr,BlueStrAsString’RGB的字符DimRedNum,GreenNum,BlueNumAsInteger’RGB的數(shù)值FunctionGetColorValue()AsString‘獲得輸入值RedNum=HScroll1(0).ValueGreenNum=HScroll1(1).ValueBlueNum=HScroll1(2).ValueRedStr=He*(RedNum)IfLen(RedStr)<2ThenRedStr="0"+RedStr’補(bǔ)零GreenStr=He*(GreenNum)IfLen(GreenStr)<2ThenGreenStr="0"+GreenStrBlueStr=He*(BlueNum)IfLen(BlueStr)<2ThenBlueStr="0"+BlueStrGetColorValue=RedStr+GreenStr+BlueStr’合并EndFunctionPrivateSubForm_Load()‘初始化程序Te*t1.Te*t=GetColorValuePicture1.BackColor=RGB(RedNum,GreenNum,BlueNum)'RGB函數(shù)返回顏色值EndSubPrivateSubHScroll1_Change(Inde*AsInteger)‘當(dāng)滾動條被改變時Te*t1.Te*t=GetColorValuePicture1.BackColor=RGB(RedNum,GreenNum,BlueNum)EndSub運(yùn)行如圖6-13。列表框〔ListBo*〕和復(fù)合列表框〔boBo*〕也是我們經(jīng)常見到的視窗元素,我們從它所列示的條目中選出所需的,兩種列表框只是在外觀上略有不同,但從本質(zhì)和操作方法來說它們是很相象的,它們也有一些特殊的屬性:List屬性,你可以利于該屬性象列表框或復(fù)合列表框中添加條目,但也可以在程序設(shè)計(jì)過AddItem方法添加。ListCount屬性,返回列表框或復(fù)合列表框中條目的數(shù)目。ListInde*屬性,表示列表框或復(fù)合列表框的第幾項(xiàng)條目。〔從0到ListCount-1〕Sorted屬性,可以通過該屬性對列表框或復(fù)合列表框中的條目根據(jù)字母順序排序。MultiSelect屬性,0表示不能多項(xiàng)選擇,1表示簡單多項(xiàng)選擇,2表示寬展多項(xiàng)選擇,僅限于列表框。Columns屬性,表示條目是以一列顯示還是兩列顯示,僅限于列表框。Style屬性:表示列表框或復(fù)合列表框以何種風(fēng)格顯示,二者參數(shù)不同。舉兩個簡單的例子。例子一,建立一個新工程文件,在Form1上添加一個List控件,調(diào)整適當(dāng)?shù)某叽纾瑹o需改變?nèi)魏螌傩?。填寫以下代碼。PrivateSubForm_Load()WithList1.AddItem"0-Default".AddItem"1-Arrow".AddItem"2-Cross".AddItem"3-I-Beam".AddItem"4-Icon".AddItem"5-Size".AddItem"6-SizeNESW".AddItem"7-SizeNS".AddItem"8-SizeNWSE".AddItem"9-SizeWE".AddItem"10-UpArrow".AddItem"11-Hourglass".AddItem"12-NoDrag".AddItem"13-ArrowAndHourglass".AddItem"14-ArrowAndQuestion".AddItem"15-SizeAll"EndWithEndSubPrivateSubList1_Click()MousePointer=List1.ListInde*’這里的MousePointer是窗體全局的屬性EndSub當(dāng)你點(diǎn)在不同項(xiàng)上面鼠標(biāo)指針也會隨著改變,如圖6-14。AddItem方法語法如下:ListObject“字符串〞,數(shù)值字符串后的數(shù)值可以指定條目參加在第幾個條目的位置上,如果沒有的話,添加項(xiàng)將逐次排下去。下面舉一個復(fù)合列表框的例子,例子通過選擇復(fù)合列表框中的選項(xiàng)來改變文本框的字體。請新建一個工程文件,在窗體中添加一個boBo*〔bo1〕和一個Te*tBo*〔Te*t1〕,添加如下代碼。PrivateSubbo1_Click()Te*t1.FontName=bo1.List(bo1.ListInde*)EndSubPrivateSubForm_Load()Withbo1.AddItem"宋體".AddItem"隸書".AddItem"黑體".AddItem"楷體".ListInde*=0'把第一個條目作為初始項(xiàng)EndWithTe*t1.FontSize=30’放大字體Te*t1.FontName=bo1.List(0)’初始字體為“EndSub如圖6-15?!驳诹峦辍?.107第七章輸出上一章里,我們討論的VB的輸人機(jī)制,這次我們來集中討論VB息的輸出。輸入和輸出是不可分割的,人們輸入的最終目的是希望計(jì)算機(jī)作出反響,任何一個程序都不可能避開這個問題,所以就算要完成一個最根本的程序,也要有輸出的局部,復(fù)雜的程序更是如此。在輸入的一章里,我們學(xué)習(xí)的第一個輸入方法是InputBo*,相應(yīng)的在輸出中我們第一個要接觸的是MsgBo*〔MessageBo*〕,和InputBo*相似,MsgBo*也是簡化了的窗體,可以以函數(shù)的形式返回操作。它的根本語法是:MsgBo*"顯示容",按鈕值,"標(biāo)題"通過這個函數(shù)可以產(chǎn)生一個標(biāo)準(zhǔn)的Windows消息框,象我們平時經(jīng)常接觸的“Yes/No〞、“OK/Cancel〞,“Retry/Abort/Ignore〞等等,這些都是在按鈕值中設(shè)定的,按鈕值如下:數(shù)值含義0OK1OK和Cancel2Abort、Retry和Ignore3Yes、No和Cancel4Yes和No5Retry和Cancel并且不同的消息可以搭配不同的圖標(biāo),比方幫助文件用問號,一般提示用一個圈里一個I等等,它們也是按鈕值的一局部:數(shù)值含義16表示危險32表示問號48表示警告64表示信息但是如何既顯示按鈕也顯示相應(yīng)的圖標(biāo)呢,請看一會兒下面的例子。前面說過,MsgBo*是函數(shù),則它就會有返回值,當(dāng)你按下*個按鈕就會返回一個數(shù)值,以便對用戶不同動作的捕捉,返回值如下:數(shù)值含義1OK2Cancel3Abort4Retry5Ignore6Yes7No說了這么多,可能你已經(jīng)不知所措了,不過看過下面的例子后,相信一切都會迎刃而解。首先建立一個新工程文件,并添加以下對象〔見圖7-1〕――一個Button〔mand1〕,兩個boBo*〔bo1和bo2〕,不要對其屬性做更多的修改,只需把mand1的Caption改為“ClickMe〞。這個程序的目的是自由組合上面的按鈕值,以顯示各種消息框,并且返回按下的按鈕,bo1和bo2分別用來選擇按鈕值,首先在Form_Load中初始化程序:PrivateSubForm_Load()bo1.AddItem"OK"bo1.AddItem"OKandCancel"bo1.AddItem"Abort,RetryandIgnore"bo1.AddItem"Yes,No,Cancel"bo1.AddItem"Yes,No"bo1.AddItem"Retry,Cancel"bo1.ListInde*=0bo2.AddItem"危險"bo2.AddItem"詢問"bo2.AddItem"警告"bo2.AddItem"信息"bo2.ListInde*=0EndSubboBo*的用法已經(jīng)在上一章中討論過,在此不再贅述,ListInde*屬性用來把第一個元素放在選擇位置。但是如何顯示需要的按鈕和圖標(biāo)呢?很簡單,只需把它們相加,比方說要顯示OK、Cancel按鈕和警告的圖標(biāo),只需把1和48相加,得到49即可,于是我們在mand1中填寫這樣一行:PrivateSubmand1_Click()message=MsgBo*("顯示"&bo1.List(bo1.ListInde*)&"和"&bo2.List(bo2.ListInde*),bo1.ListInde*+(bo2.ListInde*+1)*16,"消息演示")EndSub因?yàn)閳D標(biāo)值是從16開場的所以要把bo2的ListInde*加1再乘以16。小知識:按鈕值并非簡單的相加按鈕值并非簡單的相加,我們知道,在計(jì)算機(jī)里最終的語言是機(jī)器語言,而機(jī)器語言是以0和1的二進(jìn)制表示的,在這里用到的實(shí)際上不是相加,而是邏輯操作符“OR〞,你知道OR和AND是怎樣工作的嗎?正如你所知,TrueAndFalse得到False,而TrueOrFalse得到True,這是怎么形成的呢?我們有時也用0代表False,用1或-1代表True〔其實(shí),只要非零都可以代表True〕,而0和1在二進(jìn)制中還是本身,于是True、False的運(yùn)算就變成的0和1的運(yùn)算,我們可以把And叫做補(bǔ)0運(yùn)算,把Or叫做補(bǔ)1運(yùn)算,當(dāng)用And處理兩個二進(jìn)制數(shù)的時候,它們逐位比擬,如果一樣的位上都是0或都是1則沒有變化,而如果一位上是0,另一位上是1,最后結(jié)果上相應(yīng)的位上就變成0。比方1010〔十進(jìn)制中10〕And1101〔十進(jìn)制中13〕,最后就得1000〔十進(jìn)制中8〕,一樣的Or亦是如此,只不過在不同的地方補(bǔ)1。在位數(shù)不同時,前面補(bǔ)0,你可以在VB中試試看。但為什么要講這些呢,原因是我不想讓大家真的以為這個例子中就是相加,只不過碰巧它們的0和1處在不同的位置上,并且這個小知識在今后的位圖操作和API操作中很有用處。下面在來判斷用戶按下的按鈕。PrivateSubmand1_Click()message=MsgBo*("顯示"&bo1.List(bo1.ListInde*)&"和"&bo2.List(bo2.ListInde*),bo1.ListInde*+(bo2.ListInde*+1)*16,"消息演示")SelectCasemessageCase1MsgBo*"你按下了OK鈕"Case2MsgBo*"你按下了Cancel按鈕"Case3MsgBo*"你按下了Abort按鈕"Case4MsgBo*"你按下了Retry按鈕"Case5MsgBo*"你按下了Ignore按鈕"Case6MsgBo*"你按下了Yes按鈕"Case7MsgBo*"你按下了No按鈕"EndSelectEndSub運(yùn)行程序,結(jié)果如圖7-2,7-3。2.附錄2.1VB教程第四章按鈕〔一〕從本章開場我們將正式進(jìn)入VB的編程世界,但這還僅僅是個開端,要編出功能強(qiáng)大的軟件,還要學(xué)很多東西,那就要看以后的VB高級教程了,我也得努力學(xué)??!按鈕是我們在Windows操作見到最多的控件,它們有著各種各樣的功能:“確認(rèn)〞、“取消〞、“下一步〞等等,這些都是按鈕的表現(xiàn),另外還有很多圖形話的按鈕,其實(shí)它們并沒什么不同,所有的按鈕都是通過單擊〔click〕事件實(shí)現(xiàn)的,只不過是在外表不同罷了。下面就讓我們建立一個最簡單的按鈕,雙擊工具箱的mandButton,將在窗體上建立一個形如圖4-1的按鈕,它的缺省名〔Name屬性〕為mand1,我們可以把它改名為cmdE*it,把Caption屬性設(shè)為“退出〞,然后雙擊,按鈕填寫代碼:PrivateSubcmdE*it_Click()UnloadMeEndSub按下F5或者工具條上的播放按鈕,運(yùn)行程序。圖4-2當(dāng)你按下退出按鈕的時候,就會自動退出程序,原因是當(dāng)你單擊按鈕時激活了它的Click事件,執(zhí)行“UnloadMe〞語句,使得窗體被卸載。上面舉了一個比擬簡單的例子,下面的例子稍微復(fù)雜些:新建窗體,控件布局如圖4-3所示,包括一個List控件,一個Te*t控件和兩個按鈕〔mand1和mand2〕,〔比擬簡單的程序我們都采用缺省名〕,對它們屬性做如下修改:List1Caption=“請輸入你的名字〞Te*t1Te*t=“〞〔空字符串
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 62305:2025 SER EN-FR Protection against lightning - ALL PARTS
- 四川省瀘州市瀘州高級中學(xué)校2024-2025學(xué)年七年級上學(xué)期1月期末地理試卷(含答案)
- 內(nèi)蒙古自治區(qū)烏蘭察布市2024-2025學(xué)年八年級上學(xué)期基礎(chǔ)教育階段學(xué)生學(xué)科素養(yǎng)提升監(jiān)測物理試題(含答案)
- 廣東省潮州市2024-2025學(xué)年高二上學(xué)期期末地理試卷( 含答案)
- 6#樓勞務(wù)分包合同
- 2024訂票服務(wù)詳細(xì)條款協(xié)議示例
- 田徑接力跑 說課稿-2023-2024學(xué)年高二上學(xué)期體育與健康人教版必修第一冊
- 2024青年雞養(yǎng)殖廢棄物資源化利用合作合同模板3篇
- 福建省南平市嵐下中學(xué)2020-2021學(xué)年高二化學(xué)期末試卷含解析
- 2024石灰石礦產(chǎn)品環(huán)保產(chǎn)業(yè)發(fā)展規(guī)劃與合作合同3篇
- 防造假管理程序文件
- 高中化學(xué)名師工作室三年發(fā)展規(guī)劃
- 同濟(jì)大學(xué)信紙
- 高處作業(yè)安全培訓(xùn)課件-
- 國家義務(wù)教育質(zhì)量監(jiān)測科學(xué)四年級創(chuàng)新作業(yè)測試卷【附答案】
- 硫磺安全技術(shù)說明書MSDS
- 職中英語期末考試質(zhì)量分析
- 過盈配合壓裝力計(jì)算
- 先天性肌性斜頸的康復(fù)
- GB/T 37518-2019代理報關(guān)服務(wù)規(guī)范
- GB/T 34370.1-2017游樂設(shè)施無損檢測第1部分:總則
評論
0/150
提交評論