第四章 按鈕(一)
從本章開始我們將正式進(jìn)入VB的編程世界,,但這還僅僅是個開端,,要編出功能強(qiáng)大的軟件,還要學(xué)很多東西,,那就要看以后的VB高級教程了,,我也得努力學(xué)啊,! 按鈕是我們在Windows操作見到最多的控件,,它們有著各種各樣的功能:“確認(rèn)”、“取消”,、“下一步”等等,,這些都是按鈕的表現(xiàn),另外還有很多圖形話的按鈕,,其實(shí)它們并沒什么不同,,所有的按鈕都是通過單擊(click)事件實(shí)現(xiàn)的,只不過是在外表不同罷了,。下面就讓我們建立一個最簡單的按鈕,,雙擊工具箱的CommandButton,,將在窗體上建立一個形如圖4-1的按鈕,它的缺省名(Name屬性)為Command1,,我們可以把它改名為cmdExit,,把Caption屬性設(shè)為“退出”,然后雙擊,,按鈕填寫代碼: PrivateSubcmdExit_Click() UnloadMe EndSub 按下F5或者工具條上的播放按鈕,,運(yùn)行程序。圖4-2當(dāng)你按下退出按鈕的時候,,就會自動退出程序,,原因是當(dāng)你單擊按鈕時激活了它的Click事件,執(zhí)行“UnloadMe”語句,,使得窗體被卸載,。 上面舉了一個比較簡單的例子,下面的例子稍微復(fù)雜些: 新建窗體,,控件布局如圖4-3所示,,包括一個List控件,一個Text控件和兩個按鈕(Command1和Command2),,?。ū容^簡單的程序我們都采用缺省名),對它們屬性做如下修改: List1 Caption=“請輸入你的名字” Text1 Text=“”(空字符串) Button1 Caption=“復(fù)原” Enabled=False Button2 Caption=“清除” 把使用Button1的Enabled屬性設(shè)為False(假),,是使程序在初始時,,無法單擊Command1。按F5,,運(yùn)行程序,,圖4-4,復(fù)原按鈕成為灰色,,不可選。 當(dāng)然現(xiàn)在程序還什么也不能做,,下面我們在程序中添加代碼: 首先在General里聲明全局變量: DimStoreStringAsString'用來儲存字符串 ※注意:為什么用全局變量,? VB里每一個小過程都相當(dāng)于一個程序,程序里的變量稱為局部變量,,是只能在程序內(nèi)部使用的,,而當(dāng)程序調(diào)用結(jié)束后,由于從內(nèi)存中被清除,,所以變量儲存的值也就消失了,,這里的全局變量是用來在過程中傳遞字符串。
接著填寫以下代碼: PrivateSubCommand1_Click() Text1.Text=StoreString Command1.Enabled=False EndSub PrivateSubCommand2_Click() StoreString=Text1.Text Text1.Text=""'清除 Command1.Enabled=True EndSub 運(yùn)行程序,,如圖4-5,。按下“清除”,,文本框被清除,按下“復(fù)原”,,文本有被恢復(fù),,許多程序中的Undo/Redo就是利用這個原理實(shí)現(xiàn)的,現(xiàn)在知道為什么內(nèi)存越多越好了吧,。 我們在把程序修改一下,,把Button2刪除,Button1的Enabled屬性改為True,,Caption改為“清除”,,填寫代碼: PrivateSubCommand1_Click() IfCommand1.Caption="清除"Then StoreString=Text1.Text Text1.Text=""'清除 Command1.Caption="復(fù)原" Else Text1.Text=StoreString Command1.Caption="清除" EndIf EndSub 同樣可以上面的功能,但是卻少用了一個控件,,控件使用少的程序啟動會快些,。
下面的例子要更加復(fù)雜些,大家一定都用過Windows附件中的計(jì)算器,,它是一個標(biāo)準(zhǔn)的科學(xué)計(jì)算器,,利用VB我們也可以做到,只是沒有那么復(fù)雜,,四則運(yùn)算而已,。 先建立一個新的項(xiàng)目文件,里面包含一個Form1的窗體,。然后,,添加控件,包括一個Text框(Text1),,和17個按鈕,,這17個按鈕使用的名稱都是Command1,只是Index屬性不同,,就好象一個數(shù)組,,創(chuàng)立一組按鈕的方法是,先在窗體上建立一個按鈕(Command1),,然后在Command1上擊鼠標(biāo)右鍵,,選擇復(fù)制(Copy),然后在窗體上任意部位擊右鍵,,選擇粘貼(Paste),,系統(tǒng)會提示是否創(chuàng)建控件組,選擇“是”,,重復(fù)上面步驟,,直至創(chuàng)立17個按鈕為止。各控件屬性如下表: Text1 BackColor=&H00C0FFFF& Text=“0.” Command1 Index0DD16 Index0DD9Caption=“0”-“9” Index10Caption=“.” Index11Caption=“=” Index12Caption=“ ” Index13Caption=“-” Index14Caption=“×” Index15Caption=“÷” Index16Caption=“清除”
如果想改變一些其他的屬性,,比如字體,,可以自己定義一下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)立組的控件相比,,它的事件里多了Index參數(shù),,組里所有的對象都使用同一個事件。 先在General里聲明窗體級全局變量: DimNum1,Num2AsSingle DimStrNum1,StrNum2AsString DimFirstNumAsBoolean'判斷是否是數(shù)字開頭 因?yàn)門ext1里是存放字符串的,,所以要把輸入的數(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ū)分各個按鈕,,雙擊任意按鈕輸入代碼: PrivateSubCommand1_Click(IndexAsInteger) SelectCaseIndex Case0To9 IfFirstNumThen StrNum1=Str(Index)’實(shí)型轉(zhuǎn)字符型 FirstNum=False’初賦值為假 Else’非初賦值 StrNum1=StrNum1 Str(Index) EndIf Text1.Text=StrNum1’顯示 <還有其他語句,,等待插入> EndSelect EndSub
運(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 在Command的單擊事件里接著上面輸入新的代碼: Case10 IfNotPointFlagThen’如果沒有小數(shù)點(diǎn) IfFirstNumThen’如果是第一個字符 StrNum1="0." FirstNum=False Else StrNum1=StrNum1 "." EndIf Else’已有小數(shù)點(diǎn) ExitSub’則退出單擊事件 EndIf PointFlag=True Text1.Text=StrNum1 |
|