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