vb教程(練習(xí)試題適合新手)_第1頁
vb教程(練習(xí)試題適合新手)_第2頁
vb教程(練習(xí)試題適合新手)_第3頁
vb教程(練習(xí)試題適合新手)_第4頁
vb教程(練習(xí)試題適合新手)_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VB教程I

VB練習(xí)試題(適合新手)

我們需要什么?當(dāng)我們?cè)谝粋€(gè)精彩的游戲世界中游歷了一番之后,或

是驚嘆于某一工具軟件的小巧精致之余,多少總會(huì)產(chǎn)生些許編程的沖動(dòng)。

編程嗎,在以前如果你對(duì)電腦還是一個(gè)門外漢,那實(shí)在是一件可望而不可

及的事情。如果運(yùn)用基于DOS下的編程語言,譬如C、Qbasic、Pascal等

等,真不知何年何月才能有所成就。

編程是需要天賦的,你必須在大腦中對(duì)整個(gè)程序有一個(gè)清晰的輪廓,

一個(gè)高效的流程,這并不是每個(gè)人都能做到的,你必須思之慎之,這也使

編程變成一件最枯燥無味的事情。但在第四代計(jì)算機(jī)語言(可視化編程)

出現(xiàn)后,可以確切的說它開發(fā)了人們的更多天賦,并不局限于那些頭腦異

常清晰的人,每一個(gè)人都可以發(fā)現(xiàn)自己也可以編出一些從前不敢問津的程

序,想象力的充分發(fā)揮才是第四代語言的精粹。

VisualBasic(以下簡(jiǎn)稱VB)可以說是可視化語言的先驅(qū)了,而且它

也是可視化程度最高的一個(gè),從幾年前VB誕生之日起到現(xiàn)在,它已經(jīng)經(jīng)歷

了五個(gè)版本,而且現(xiàn)在微軟正在緊張的進(jìn)行著VB6.0的研制、測(cè)試,這么

高的更新率,不外乎說明兩個(gè)問題:用戶對(duì)VB的熱衷,微軟對(duì)VB的重視。

不可否認(rèn)微軟對(duì)市場(chǎng)的預(yù)測(cè)能力是極為高明的,而它強(qiáng)大的技術(shù)、財(cái)力支

持也使它在許多以前未進(jìn)入的領(lǐng)域,在不長(zhǎng)的時(shí)間內(nèi)有成為最有力的競(jìng)爭(zhēng)

對(duì)手,如IE之于瀏覽器領(lǐng)域,《帝國(guó)時(shí)代》之于游戲都是最好的例證。對(duì)

于VB現(xiàn)在也有一個(gè)很強(qiáng)的競(jìng)爭(zhēng)對(duì)手一一Delphi,有人把它稱作VB殺手,

這顯然有偏激之處,VB的確有它的不足之處,但Delphi又何嘗不是呢,而

且以微軟對(duì)VB的傾心,VB的功能必然會(huì)越來越強(qiáng)大。

VB的誕生

VB的出現(xiàn)可以說是MicrosoftWindows的日漸成熟的必然產(chǎn)物。

MicrosoftWindows為程序員和最終用戶提供了一個(gè)共同的人機(jī)界面。對(duì)用

戶,Windows提供了一個(gè)圖形鼠標(biāo)的操作環(huán)境,該環(huán)境對(duì)所有的應(yīng)用程序都

一樣;對(duì)于程序員,Windows提供了一組預(yù)定義工具稱之為Microsoft

Windows的軟件開發(fā)工具箱(SDK),該工具能使程序員建立一個(gè)與Windows

界面相同的應(yīng)用程序,而且,程序員不必關(guān)心最終用戶的硬件配置情況。

在這一開發(fā)環(huán)境中,程序員唯一困難的是MicrosoftSDK提供了六百多個(gè)

函數(shù)和與其一致的事件驅(qū)動(dòng)(event-driven)編程技術(shù)。兩種新方法的交

叉使眾多的程序員重新陷入困境,程序員不僅要掌握程序驅(qū)動(dòng)編程技術(shù)和

六百多個(gè)函數(shù)的功能,而且還得用C語言描述這些問題。因此一般情況下,

程序員首先要掌握C程序設(shè)計(jì)技術(shù),而后再開始學(xué)習(xí)SDKo這樣的條件下就

要求在Microsoft多任務(wù)環(huán)境下出現(xiàn)一種操作方便,使用簡(jiǎn)單的新工具一

VisualBasic由此誕生。

何為可視

英文Visual的意思是“視覺的”,“可視的Baisc”這個(gè)名字可能

抽象了點(diǎn),但實(shí)際上它卻是最直觀的編程方法,之所以叫做“可視”,你

只要看到VB的界面就會(huì)明白,實(shí)際上你無需編程,就可以完成許多步驟。

在VB中引入了控件的概念,在Windows中控件的身影無處不在,各種各樣

的按鈕、文本框、無線鈕,都是控件的種類,VB把這些控件模式化,并且

每個(gè)控件都有若干屬性用來控制控件的外觀,工作方法。這樣你就可以象

在畫板上一樣,隨意點(diǎn)幾下鼠標(biāo),一個(gè)按鈕就完成了,這些在以前的編程

語言下是要經(jīng)過相當(dāng)復(fù)雜的工作的。

第二章:事件、屬性及數(shù)據(jù)類型

以后兩章可能會(huì)比較枯燥,但不可否認(rèn)也很重要,所以為了學(xué)好VB,我們

一定要打好基礎(chǔ)才行。

一、事件

通過上一章的例子,你可能對(duì)“面向?qū)ο蟮木幊獭币呀?jīng)有了一定了解,它

是由事件驅(qū)動(dòng)的,對(duì)于不同的對(duì)象,所能感應(yīng)到的事件也會(huì)不同,譬如說

當(dāng)你把鼠標(biāo)移進(jìn)某一區(qū)域時(shí)就會(huì)觸發(fā)MouseMove事件,這很直觀,也容易

理解,但也有些事件比較抽象,下面我來對(duì)一般的事件進(jìn)行一下解釋。

窗體和圖象框類事件

Paint事件:當(dāng)某一對(duì)象在屏幕中被移動(dòng),改變尺寸或清除后,程序會(huì)自動(dòng)

調(diào)用Paint事件。注意:當(dāng)對(duì)象的AutoDraw屬性為True(—1)時(shí),程序

不會(huì)調(diào)用Paint事件。

Resize事件:當(dāng)對(duì)象的大小改變時(shí)觸發(fā)Resize事件。

Load事件:僅適用于窗體對(duì)象,當(dāng)窗體被裝載時(shí)運(yùn)行。

Unload事件:僅適用于窗體對(duì)象,當(dāng)窗體被卸載時(shí)運(yùn)行。

2.當(dāng)前光標(biāo)(Focus)事件

GotFocus事件:當(dāng)光標(biāo)聚焦于該對(duì)象時(shí)發(fā)生事件。

LostFocus事件:當(dāng)光標(biāo)離開該對(duì)象時(shí)發(fā)生事件。

注意:Focus英文為“焦點(diǎn)”、“聚焦”之意,最直觀的例子是,比如有兩

個(gè)窗體,互相有一部分遮蓋,當(dāng)你點(diǎn)下面的窗體時(shí),它就會(huì)全部顯示出來,

這時(shí)它處在被激活的狀態(tài),并且標(biāo)題條變成藍(lán)色,這就是GotFocus事件,

而相反,另外一個(gè)窗體被遮蓋,并且標(biāo)題條變灰,稱為L(zhǎng)ostFocus事件。

上面所說的“光標(biāo)”并非指鼠標(biāo)指針。

3.鼠標(biāo)操作事件

Click事件:鼠標(biāo)單擊對(duì)象。

DbClick事件:鼠標(biāo)雙擊事件。

MouseDown>MouseUp屬性:按下/放開鼠標(biāo)鍵事件。

MouseMove事件:鼠標(biāo)移動(dòng)事件。

DragDrop事件:拖放事件,相當(dāng)于MouseDown、MouseMove和MouseUp的組

合。

DragOver事件:鼠標(biāo)在拖放過程中就會(huì)產(chǎn)生DragOver事件。

4.鍵盤操作屬性

KeyDown、KeyUp事件:按鍵的按下/放開事件。

KeyPress事件:按鍵事件。

5.改變控制項(xiàng)事件

Change事件:當(dāng)對(duì)象的內(nèi)容發(fā)生改變時(shí),觸發(fā)Change事件。最典型的例子

是文本框(TextBox)o

DropDown事件:下彈事件,僅用于組合框(ComboBox)對(duì)象。

PathChange事件:路徑改變事件,僅用于文件列表框(FileBox)對(duì)象。

6.其他事件

Timer事件:僅用于計(jì)時(shí)器,每隔一段時(shí)間被觸發(fā)一次。

二、屬性

每個(gè)對(duì)象都有它的屬性,并且“Name”屬性是共有的,有了“Name”

屬性才可以在程序中進(jìn)行調(diào)用。對(duì)于屬性,可以在窗體的布局操作中完成,

也可以在程序運(yùn)行中改變,這取決你的需要,但有些屬性是只讀的,它只

能在控件布局時(shí)改變。我將在以后的實(shí)例中具體介紹各個(gè)屬性的作用。

三、數(shù)據(jù)類型

學(xué)過編程的人都知道大多數(shù)的計(jì)算機(jī)語言都規(guī)定了各自的數(shù)據(jù)類型,VB也

不例外。其實(shí),在一個(gè)最簡(jiǎn)單的程序中數(shù)據(jù)類型是可以不作規(guī)定的,也就

是說,變量可以使用各種類型,但是在一個(gè)復(fù)雜的程序里,這樣做就很危

險(xiǎn),因?yàn)楹芸赡芙o同一個(gè)變量賦予了不同的類型,而導(dǎo)致程序出錯(cuò)。所以,

為了程序的嚴(yán)謹(jǐn)和便于查看,正確的定義數(shù)據(jù)類型是必要的。定義數(shù)據(jù)的

另一個(gè)原因是,不同的數(shù)據(jù)占用不同的內(nèi)存數(shù)量,譬如整型(Interger)

數(shù)據(jù)占2字節(jié),而長(zhǎng)整型數(shù)據(jù)占4個(gè)字節(jié),定義合適的數(shù)據(jù)類型,不管你

相信不相信,它可以節(jié)省內(nèi)存!

VB常用的數(shù)據(jù)類型有:整型(Integer,表示-32768至32767之間的整數(shù))、

長(zhǎng)整型(Long,表示-2,147,483,648至2,147,483,647之間的整數(shù))、實(shí)

型(Single,表示-3.37E+38至3.37E+38之間的實(shí)數(shù))、雙精度實(shí)型(Double,

表示-1.67E+308至1.67E+308之間的實(shí)數(shù)),字符(String,每個(gè)字符占

一字節(jié),可以儲(chǔ)存0?65,535個(gè)字符),布爾(Boolean,只有兩個(gè)值True/-1,

或False/0)。

數(shù)據(jù)類型的定義方法:

定義變量最簡(jiǎn)單的方法是用“Dim”關(guān)鍵字,它的語法:

Dim【變量名】As【數(shù)據(jù)類型】

如:DimIndexAsInteger

也可以在一行中定義多個(gè)變量,如:

DimIndexAsInteger,DimNumberAsLong

把多個(gè)變量定義成同一類型可以寫成:

DimIndex,NumberAsInteger

更可以在定義時(shí)進(jìn)行初賦值:

DimIndex=3

有時(shí)為了簡(jiǎn)便,也以符號(hào)進(jìn)行簡(jiǎn)單的定義,作用是和上面一樣的。整型可

以用“%”代替,長(zhǎng)整型可以用代替,實(shí)型可以用“!”,雙精度實(shí)型

可以用“曠定義,如剛才的第一個(gè)例子可以寫成:

DimIndex%等價(jià)于DimIndexAsInteger

對(duì)于常量的定義用Const定義,如:ConstC0L0R=255o

為了在程序中便于查閱,我們對(duì)變量和常量的寫法進(jìn)行規(guī)定,變量一般用

小寫方式,常量則全部大寫。

注意:使用常量的好處,對(duì)于程序中經(jīng)常出現(xiàn)的數(shù)值,應(yīng)設(shè)常量等于它,

這樣一是書寫方便,其二,如果要改變?cè)摂?shù)值,只需改變定義常量的語句

值,而不需改變每個(gè)語句,提高了效率。

數(shù)組的定義類似于變量定義,所不同的是數(shù)組需要指定數(shù)組中的元素個(gè)數(shù),

例如:

DimIntegerArray(99)AsInteger

這個(gè)數(shù)組中包含100個(gè)元素,腳標(biāo)從。到99。

也可以指定腳標(biāo)的起始值,例如:

DimIntegerArray(2to10)AsInteger

這個(gè)數(shù)組含有九個(gè)元素,腳標(biāo)從2到10。

還可以定義多維數(shù)組:

DimThreeD(4,2to5,3to6)AsInteger

上例定義了一個(gè)三維數(shù)組(4X4X4)o

記錄的定義

記錄定義是把控制權(quán)交給用戶的方法,它讓用戶可以定義自己的數(shù)據(jù)類型,

它使用關(guān)鍵字“Type”,方法是:

Type【數(shù)據(jù)類型標(biāo)識(shí)符】

〈域名>As〈數(shù)據(jù)類型》

〈域名》As〈數(shù)據(jù)類型》

〈域名>As〈數(shù)據(jù)類型》

EndType

例如,定義一個(gè)地址數(shù)據(jù):

TypeAddress

StreetAsString

ZipCodeAsString

PhoneAsString

EndType

這個(gè)地址數(shù)據(jù)里包括三個(gè)屬性,街區(qū)、郵政編碼和電話,可以把某數(shù)據(jù)定

義成此類型:

DimMyHomeAsAddress

要調(diào)用或改變“MyHome”的值時(shí),類似于對(duì)對(duì)象的屬性的操作:

變量名.域名=”……”

為了簡(jiǎn)化書寫重復(fù)的部分,可以用關(guān)鍵字“With”:

WithMyHome

.Streeti'阜成路"

.ZipCode="100037”

.Phone="12345678”

EndWith

本章提要:

VB語法與Basic的異同

注釋語句

長(zhǎng)語句的分行

條件語句

循環(huán)語句

運(yùn)算操作

數(shù)據(jù)定義與賦值

函數(shù)和過程

一、VB與Basic

VB之所以叫做“VisualBasic"就是因?yàn)樗褂昧薆asic語言作為代碼,

所以它們之間有著千絲萬縷的關(guān)系,如果學(xué)過Basic的話,看到VB的程序

結(jié)構(gòu)會(huì)感到很親切。但VB作為新生物,也超越了Basic的限制,有了許多

自己的特點(diǎn):

VB建立了一種新的變量類型一一貨幣型變量,通過使用僅帶有二位小數(shù)的

貨幣變量,就能避免因使用實(shí)型變量而帶來的數(shù)值積累誤差問題。

VB在調(diào)用函數(shù)(Function)時(shí),必須在函數(shù)名后跟一對(duì)括號(hào)。

VB對(duì)白蘭地使用范圍重新做了規(guī)范,在Basic里把隱含變量都當(dāng)作全局變

量,而在VB里對(duì)隱含變量都當(dāng)作局部變量。

VB里的說明語句(Declare),僅支持動(dòng)態(tài)鏈結(jié)庫(kù)(DLL)的子程序和無變

量函數(shù)。

使用數(shù)組,必須事先用Dim或Redim進(jìn)行定義。

二、注釋語句

在使用注釋語句之前必須先了解注釋的作用,注釋不僅僅是對(duì)程序的解釋,

有時(shí)它對(duì)于程序的調(diào)試也非常有用,譬如說可以利用注釋屏蔽一條語句以

觀察變化,發(fā)現(xiàn)問題和錯(cuò)誤。以后注釋語句將是我們?cè)诰幊汤镒罱?jīng)常用到

的語句之一。

在VB里,注釋語句有兩種,一種是用“Rem”關(guān)鍵字,這跟DOS里的批處

理文件的用法一樣,還有一種是利用單引號(hào),例如:

'DimaAsString與

RemDimaAsString的作用是一致的。

三、長(zhǎng)語句的分行

在比較早的版本中,因?yàn)闆]有象C等語言用“;”隔開語句與語句,VB的

語句是必須寫在一行里的,不過后來版本的VB里如許用分行符“,把一

個(gè)長(zhǎng)語句分成若干行來存放。

四、條件語句

如果你學(xué)過任何一種編程的話,都會(huì)知道在程序里控制其流程的有兩種語

句,條件與循環(huán),VB自然也不例外,其實(shí)不管哪種語言,條件和循環(huán)的樣

子都差不多,只不過各有各的規(guī)矩罷了。

在條件語句里,我們先來學(xué)習(xí)“If……Then……”語句。

它的一般語法是:

If〈條件》Then

〈語句〉

〈語句〉

EndIf

與C語言不同,VB的條件語句更符合英語的語法,如果Then后面所跟的

語句只有一條,可以寫成:

If〈條件》Then〈語句〉

而不用EndIfo

有時(shí)我們還會(huì)用到

If〈條件》Then

<語句》

Else

(語句〉

EndIf

更可以在Else里在嵌套If語句,如:

If〈條件》Then

〈語句〉

ElseIf

〈語句〉

Else

〈語句〉

EndIf

所有這些可以用一個(gè)表格表示:

條件1

TrueFalse

語條件2

句TrueFalse

1

語條件3

TrueFalse

2

條件N

???

TrueFalse

語句N語句N+l

用了過多的Else后你會(huì)感到很不方便,而且程序結(jié)構(gòu)也不清晰,所以大多

數(shù)的語言還有Select語句幫助解決這個(gè)問題。

VB里的Select語句的格式是這樣的:

SelectCase〈變量名〉

Case〈情況1>

Case〈情況2>

Case〈情況3>

CaseElse

EndSelect

例如:

SelectCasea%

Case1

Print“a=l”

Case2

Print“a=2”

CaseElse

Print“adoesnotequalto1or2.”

EndSelect

五、循環(huán)語句

循環(huán)結(jié)構(gòu)是計(jì)算機(jī)語言里一種重要的結(jié)構(gòu),它的應(yīng)用廣泛,最簡(jiǎn)單的例子

是累加器的作用,還可以用于窮舉法,更直觀的例子是把某件事重復(fù)指定

的次數(shù),這樣就不用把要重復(fù)的語句輸入多次,而通過循環(huán)結(jié)構(gòu)完成,非

常方便。

C語言里有一個(gè)“for”循環(huán)語句,VB里也有“For”關(guān)鍵字,作用也差不

多,只是VB的“For”語句更容易理解。它的格式是:

For〈循環(huán)變量>=(初賦值〉To(終值>[Step〈步長(zhǎng)》]

Next〈循環(huán)變量》

在默認(rèn)情況下,Step被設(shè)為“1”,可以省略,Step也可以設(shè)為負(fù)值,例

如:

Dima=0

For1=1To10

a=a+I

NextI

這是一個(gè)最簡(jiǎn)單的累加器的例子,把1到10累加在一起,然后賦值給“a”

這樣的效果和上面是一樣的,只不過是倒著加罷了,請(qǐng)看:

Dima=0

For1=10To1Step-1

a=a+I

NextI

While語句也是一個(gè)很常用的循環(huán)語句,它的形式很多。

DoWhile...Loop語句

While...Wend語句

Do...LoopWhile

While后面都跟邏輯條件判斷,"DoWhile……Loop語句”和“While……

Wend語句”作用相似,都是先判斷While后面的條件是否為“真”,如果

為“真”則執(zhí)行里面的語句,如果為“假”,則退出循環(huán),循環(huán)直至條件

為“假”終止。"Do……LoopWhile”與前兩者的區(qū)別在于,它不管條

件的真假,都會(huì)先執(zhí)行“Do”后面的語句,也就是說,它至少執(zhí)行語句一

次。

與While用法相似的還有Until語句,它是直至條件為真則終止循環(huán),句

式把While上述三個(gè)語句的While換成Until即可,但是因?yàn)槿菀子浕欤?/p>

所以我建議只用While即可。Until<條件)可以相當(dāng)于WhileNot〈條件》。

For循環(huán)和Whlie循環(huán)應(yīng)當(dāng)根據(jù)適當(dāng)?shù)沫h(huán)境使用,它們有時(shí)也可替換。

六、運(yùn)算操作

數(shù)學(xué)運(yùn)算

+:加法運(yùn)算,也適合于字符串的之間的合并運(yùn)算。

-:加法運(yùn)算。

*:乘法運(yùn)算。

/:除法運(yùn)算。

\:整除運(yùn)算。

Mod:求余運(yùn)算。例如:aModb表示a被b整除以后的余數(shù)。

7塞運(yùn)算。A「B表示以A為底的B次方。

關(guān)系運(yùn)算

關(guān)系運(yùn)算也稱比較運(yùn)算,它表示不等式的真或假,VB共提供六種運(yùn)算符,

分別是=(等于),>(大于),<(小于),>=(大于等于),<=(小于等

于)和<>(不等于)。

邏輯運(yùn)算

邏輯運(yùn)算是對(duì)真或假的運(yùn)算,我將列表說明:

ABNotAAndOrXorEqvImp

非與或異或相等蘊(yùn)

TTFTTFTT

TFFFTTFF

FTTFTTFT

FFTFFFTT

TTrueFFalse

七、數(shù)據(jù)與定義

本標(biāo)題的內(nèi)容已經(jīng)在上一章向大家詳述過,在這里就不再重復(fù)。

八、函數(shù)與過程

函數(shù)與過程有許多相似的地方,它們之間最大也是最本質(zhì)的區(qū)別就在于,

函數(shù)有一個(gè)返回值,而過程只是執(zhí)行一系列動(dòng)作,所以可以簡(jiǎn)單的把函數(shù)

理解成為一個(gè)變量,而VB中的每個(gè)事件都是一個(gè)過程,比如

Command1_Click()就是—過程。

因?yàn)樵诔绦蛟O(shè)計(jì)中經(jīng)常會(huì)有重復(fù)的地方,所以把它做成一個(gè)函數(shù)或一個(gè)過

程,在使用時(shí)進(jìn)行調(diào)用,可以節(jié)省大量的輸入代碼的時(shí)間,而且使用函數(shù)

和過程也便于程序的結(jié)構(gòu)化和修改查看。函數(shù)和過程都可以有參數(shù),也可

以沒有參數(shù)。

關(guān)于函數(shù)和過程將在以后的章中配合實(shí)例講解,請(qǐng)您繼續(xù)VB教程。

第四章按鈕(一)

從本章開始我們將正式進(jìn)入VB的編程世界,但這還僅僅是個(gè)開端,要

編出功能強(qiáng)大的軟件,還要學(xué)很多東西,那就要看以后的VB高級(jí)教程了,

我也得努力學(xué)??!

按鈕是我們?cè)赪indows操作見到最多的控件,它們有著各種各樣的功

能:“確認(rèn)”、“取消”、“下一步”等等,這些都是按鈕的表現(xiàn),另外

還有很多圖形話的按鈕,其實(shí)它們并沒什么不同,所有的按鈕都是通過單

擊(click)事件實(shí)現(xiàn)的,只不過是在外表不同罷了。下面就讓我們建立一

個(gè)最簡(jiǎn)單的按鈕,雙擊工具箱的CommandButton,將在窗體上建立一個(gè)形如

圖4—1,。2叫的按鈕,它的缺省名(Name屬性)為Commandl,我們可

以把它改名為cmdExit,把Caption屬性設(shè)為“退出”,然后雙擊,按鈕填

寫代碼:

PrivateSubcmdExit_Click()

UnloadMe

EndSub

按下F5或者工具條上的播放按鈕,運(yùn)行程序。圖4—2當(dāng)你按下退出

按鈕的時(shí)候,就會(huì)自動(dòng)退出程序,原因是當(dāng)你單擊按鈕時(shí)激活了它的Click

事件,執(zhí)行“UnloadMe”語句,使得窗體被卸載。

上面舉了一個(gè)比較簡(jiǎn)單的例子,下面的例子稍微復(fù)雜些:

新建窗體,控件布局如圖4—3所示,包括一個(gè)List控件,一個(gè)Text

控件和兩個(gè)按鈕(Command1和Command2),(比較簡(jiǎn)單的程序我們都采

用缺省名),對(duì)它們屬性做如下修改:

ListlCaption="請(qǐng)輸入你

的名字”

TextlText="(空字符

串)

ButtonlCaption="復(fù)原"

Enabled=False

Button2Caption="清除"

把使用Buttonl的Enabled屬性設(shè)為False(假),是使程序在初始時(shí),

無法單擊Commandl。按F5,運(yùn)行程序,圖4—4,復(fù)原按鈕成為灰色,不可

選。

當(dāng)然現(xiàn)在程序還什么也不能做,下面我們?cè)诔绦蛑刑砑哟a:

首先在General里聲明全局變量:

DimStoreStringAsString'用來儲(chǔ)存字符串

※注意:為什么用全局變量?

VB里每一個(gè)小過程都相當(dāng)于一個(gè)程序,程序里的變量稱為局部變量,是只

能在程序內(nèi)部使用的,而當(dāng)程序調(diào)用結(jié)束后,由于從內(nèi)存中被清除,所以

變量?jī)?chǔ)存的值也就消失了,這里的全局變量是用來在過程中傳遞字符串。

接著填寫以下代碼:

PrivateSubCommand1_Click()

Textl.Text=StoreString

Command1.Enabled=False

EndSub

PrivateSubCommand2C1ick()

StoreString=Textl.Text

Textl.Text='清除

Command1.Enabled=True

EndSub

運(yùn)行程序,如圖4—5。按下“清除”,文本框被清除,按下“復(fù)原”,

文本有被恢復(fù),許多程序中的Undo/Redo就是利用這個(gè)原理實(shí)現(xiàn)的,現(xiàn)在

知道為什么內(nèi)存越多越好了吧。

我們?cè)诎殉绦蛐薷囊幌拢袯utton2刪除,Buttonl的Enabled屬性改

為True,Caption改為“清除”,填寫代碼:

PrivateSubCommand1Click()

IfCommand1.Caption="清除"Then

StoreString=Textl.Text

Textl.Text='清除

Command1.Caption="復(fù)原"

Else

Textl.Text=StoreString

Command1.Caption="清除"

EndIf

EndSub

同樣可以上面的功能,但是卻少用了一個(gè)控件,控件使用少的程序啟

動(dòng)會(huì)快些。

下面的例子要更加復(fù)雜些,大家一定都用過Windows附件中的計(jì)算器,

它是一個(gè)標(biāo)準(zhǔn)的科學(xué)計(jì)算器,利用VB我們也可以做到,只是沒有那么復(fù)雜,

四則運(yùn)算而已。

先建立一個(gè)新的項(xiàng)目文件,里面包含一個(gè)Forml的窗體。然后,添加

控件,包括一個(gè)Text框(Textl),和17個(gè)按鈕,這17個(gè)按鈕使用的名

稱都是Command1,只是Index屬性不同,就好象一個(gè)數(shù)組,創(chuàng)立一組按鈕

的方法是,先在窗體上建立一個(gè)按鈕(Command1),然后在Commandl上擊

鼠標(biāo)右鍵,選擇復(fù)制(Copy),然后在窗體上任意部位擊右鍵,選擇粘貼

(Paste),系統(tǒng)會(huì)提示是否創(chuàng)建控件組,選擇“是”,重復(fù)上面步驟,直

至創(chuàng)立17個(gè)按鈕為止。各控件屬性如下表:

TextlBackColor=&H00C0FFFF&

Text="0.”

CommandlIndex016

Index09

Caption="0”一“9”

Index10Caption=a”

Index11Caption=“=”

Index12Caption=“+"

Index13Caption=a_v

Index14Caption=“X”

Index15Caption=a”

Index16Caption=“清

除“

如果想改變一些其他的屬性,比如字體,可以自己定義一下Font屬性,

如果相對(duì)多個(gè)控件的共同屬性進(jìn)行改變,可以在窗體上按下鼠標(biāo),拖動(dòng),

把多個(gè)控件一起選定,然后對(duì)它們的共同屬性進(jìn)行修改。

別看這個(gè)東西小,還費(fèi)了近我兩個(gè)小時(shí)呢,不覺大嘆手生,里面也有

些地方很繞彎子,我盡量解釋清楚。

在編寫程序之前,我們先來回顧一下計(jì)算器的使用。

按下數(shù)字鍵在液晶屏上會(huì)出現(xiàn)數(shù)字,這是最基本的功能。

第一次按下運(yùn)算鍵,再按下數(shù)字鍵,將重新輸入第二個(gè)數(shù)字,再次按下運(yùn)

算鍵,將算出前兩個(gè)數(shù)的結(jié)果,然后按下數(shù)字鍵,將又重新輸入新的數(shù)字。

輸入數(shù)字后,按下“等于鍵”將仍輸出原來的數(shù)字,輸入運(yùn)算符和第二個(gè)

數(shù)字后在按下“等于",將得到二者的結(jié)果。然后又重復(fù)第二、三步。

按下“清除”,數(shù)據(jù)被全部清除。

了解了這些,我們一步一步實(shí)現(xiàn)。

先實(shí)現(xiàn)數(shù)據(jù)的輸入,請(qǐng)看代碼。

與未創(chuàng)立組的控件相比,它的事件里多了Index參數(shù),組里所有的對(duì)

象都使用同一個(gè)事件。

先在General里聲明窗體級(jí)全局變量:

DimNuml,Num2AsSingle

DimStrNuml,StrNum2AsString

DimFirstNumAsBoolean'判斷是否是數(shù)字開頭

因?yàn)門extl里是存放字符串的,所以要把輸入的數(shù)據(jù)進(jìn)行運(yùn)算,必須

把字符型變量轉(zhuǎn)變?yōu)閷?shí)型變量,分別用Numl、Num2和StrNuml、StrNum2

進(jìn)行存放。

在Form_Load事件里給變量初賦值:

Numl=0

Num2=0

StrNuml=

StrNum2=""

FirstNum=True

因?yàn)?7個(gè)按鈕使用的是同一事件,所以我們用一個(gè)SelectCase語句

區(qū)分各個(gè)按鈕,雙擊任意按鈕輸入代碼:

PrivateSubCommandl_Click(IndexAsInteger)

SelectCaseIndex

Case0To9

IfFirstNumThen

StrNuml=Str(Index)J實(shí)型轉(zhuǎn)字符型

FirstNum=False,初賦值為假

Else,非初賦值

StrNuml=StrNuml+Str(Index)

EndIf

Textl.Text=StrNuml'顯示

〈還有其他語句,等待插入》

EndSelect

EndSub

運(yùn)行程序的話已經(jīng)可以輸入數(shù)據(jù),下面我們來處理小數(shù)點(diǎn)。

在General里聲明新的變量:

DimPointFlagAsBoolean'判斷是否已有小數(shù)點(diǎn)

我們知道小數(shù)點(diǎn)只能輸入一次,一個(gè)數(shù)據(jù)中不能有多個(gè)小數(shù)點(diǎn)存在,所以

需要一個(gè)布爾變量做判斷。

在Form_Load里進(jìn)行初賦值:

PointFlag=False

在Command的單擊事件里接著上面輸入新的代碼:

Case10

IfNotPointFlagThen'如果沒有小數(shù)點(diǎn)

IfFirstNumThen'如果是第一個(gè)字符

StrNuml="0."

FirstNum=False

Else

StrNuml=StrNuml+

EndIf

Else,已有小數(shù)點(diǎn)

ExitSub'則退出單擊事件

EndIf

PointFlag=True

Textl.Text=StrNuml

第四章按鈕(二)

下面會(huì)復(fù)雜一些,我們先跳過等號(hào),而來處理四則運(yùn)算:

先在General里聲明新變量:

DimRunsignAsInteger'儲(chǔ)存運(yùn)算符號(hào)

DimSignFlagAsBoolean'判斷是否已有運(yùn)算符號(hào)

然后在Form_Load中進(jìn)行初賦值:

Runsign=0

SignFlag=False

在接下的Commandl_Click中繼續(xù)輸入代碼:

Case12To15

FirstNum=True'使下一次可以輸入新數(shù)據(jù)

PointFlag=False

'還原標(biāo)記值

IfSignFlagThen'前面已有運(yùn)算符未運(yùn)算

CallRun

Else

SignFlag=True

StrNum2=StrNumf把字符串1復(fù)制給字符串2

StrNuml=字符串1清空

EndIf

Runsign=Index-11'儲(chǔ)存鍵入的運(yùn)算符

里面運(yùn)算的部分我用了一個(gè)過程,是因?yàn)樵诎聪碌忍?hào)時(shí)還會(huì)調(diào)用到運(yùn)

算過程,這樣可以減少代碼的輸入,也使程序便于瀏覽。建立過程

(Procedure),可以在General部分直接輸入,也可以通過菜單里的“Add

Procedure”添加。Run的代碼如下:

SubRun()

Numl=Vai(StrNum2)

Num2=Vai(StrNuml)

SelectCaseRunsign

Case1'力口

equal=Numl+Num2

Case2'減

equal=Numl-Num2

Case3'乘

equal=Numl*Num2

Case4'除

equal=Numl/Num2

EndSelect

StrNum2=Str(equal)

StrNuml=StrNum2

Textl.Text=StrNum2

EndSub

下面是其余的代碼:(在Commandl_Click事件里,接著寫)

Case11

IfNotSignFlagThen

Textl.Text=StrNuml

equal=Vai(StrNuml)

FirstNum=True

PointFlag=False

Else

CallRun

SignFlag=False

EndIf

CaseElse'清除按鈕

CallClearData

里面又用到了一個(gè)ClearData過程,實(shí)際上就是Form_Load里的變量初賦

值,代碼如下:

SubClearData()

Numl=0

Num2=0

StrNuml=

StrNum2=""

FirstNum=True

PointFlag=False

Runsign=0

SignFlag=False

Textl.Text="0."

EndSub

這樣完整的程序就完成了,本章介紹了VB的第一個(gè)控件一一按鈕,并且舉

例,希望你繼續(xù)看下一章一一菜單。

下面給出完整的程序代碼:

DimNuml,Num2AsSingle

DimStrNuml,StrNum2AsString

DimFirstNumAsBoolean'判斷是否是數(shù)字開頭

DimPointFlagAsBoolean'判斷是否已有小數(shù)點(diǎn)

DimRunsignAsInteger'儲(chǔ)存運(yùn)算符號(hào)

DimSignFlagAsBoolean'判斷是否已有運(yùn)算符號(hào)

SubClearData()

Numl=0

Num2=0

StrNuml=

StrNum2=""

FirstNum=True

PointFlag=False

Runsign=0

SignFlag=False

Textl.Text="0."

EndSub

SubRun()

Numl=Vai(StrNum2)

Num2=Vai(StrNuml)

SelectCaseRunsign

Case1

equal=Numl+Num2

Case2

equal=Numl-Num2

Case3

equal=Numl*Num2

Case4

equal=Numl/Num2

EndSelect

StrNum2=Str(equal)

StrNuml=StrNum2

Textl.Text=StrNum2

EndSub

PrivateSubabout_Click()

MsgBox"Createby周曉陽。1998/7/27",vbDefaultButtonl,“VB教程第

四章范例”

EndSub

PrivateSubCommandl_Click(IndexAsInteger)

SelectCaseIndex

Case0To9

IfFirstNumThen

StrNuml=Str(Index)

FirstNum=False

Else

StrNuml=StrNuml+Str(Index)

EndIf

Textl.Text=StrNuml

Case10

IfNotPointFlagThen

IfFirstNumThen

StrNuml="0."

FirstNum=False

Else

StrNuml=StrNuml+

EndIf

Else

ExitSub

EndIf

PointFlag=True

Textl.Text=StrNuml

Case12To15

FirstNum=True

PointFlag=False

'還原標(biāo)記值

IfSignFlagThen

CallRun

Else

SignFlag=True

StrNum2=StrNuml

StrNuml=

EndIf

Runsign=Index-11

Case11

IfNotSignFlagThen

Textl.Text=StrNuml

equal=Vai(StrNuml)

FirstNum=True

PointFlag=False

Else

CallRun

SignFlag=False

EndIf

CaseElse

CallClearData

EndSelect

EndSub

PrivateSubForm_Load()

CallClearData

EndSub

補(bǔ)充說明

按鈕還有兩個(gè)重要的屬性Default(默認(rèn)屬性)和Cancel(取消屬性),

兩個(gè)屬性都以布爾賦值,把Default設(shè)為True,則在按下回車鍵時(shí),不論

焦點(diǎn)處于何處,都會(huì)觸發(fā)該按鈕的Click事件,而當(dāng)Cancel屬性被設(shè)為

True,在按下ESC鍵時(shí),該按鈕的Click屬性發(fā)生。下面舉個(gè)例子:

建立一個(gè)新窗體和兩個(gè)按鈕,Name屬性分別為cmdOK和cmdCancel,把前

者的Default設(shè)為True,后者的Cancel設(shè)為True,Caption屬性分別為

0K和Cancel。如圖4—8。填寫代碼后運(yùn)行:

PrivateSubcmdCancel_Click()

MsgBox"Cancel按鈕被按下“,vbDefaultButtonl,"提示"

EndSub

PrivateSubcmdOK_Click()

MsgBox"OK按鈕被按下“,vbDefaultButtonl,"提示"

EndSub

結(jié)果如圖4—9、4-10:

提不E3[提不

。班鈕被按下C6S1按鈕被按下

|匚:喉一……喉耳

快捷鍵大家一定都知道,在VB如何實(shí)現(xiàn)呢。其實(shí)很簡(jiǎn)單,在剛才的例子里

在建立一個(gè)按鈕Commandl,把它的Caption屬性設(shè)為Click&ME,如圖4

-11,在M的下面有一條下劃線,運(yùn)行程序,當(dāng)你按下Alt+M的時(shí)候就觸

發(fā)了Commandl_Click事件:

ClickME

PrivateSubCommand1_C1ick()

MsgBox"ClickME按鈕被按下“,vbDefaultButtonl,"提示"

EndSub

據(jù)我所知,有許多用戶有使用快捷鍵的習(xí)慣,注意細(xì)節(jié)上的問題能夠使將

來你的程序得到更多人的欣賞,不是嗎?

第五章菜單

我們經(jīng)常在Windows操作里遇到各種各樣的菜單,菜單的操作把各種

命令結(jié)構(gòu)化、分分類化,也節(jié)省了命令所占的空間,從作用上來講,菜單

類似于按鈕,但它只有一個(gè)事件一一Clicko

VB作為Windows下的可視編程工具,菜單的設(shè)計(jì)當(dāng)然很容易實(shí)現(xiàn),VB3.0

按下Ctrl+M,VB4.0以上的版本請(qǐng)按下Ctrl+E,便可呼叫出菜設(shè)計(jì)的窗口,

無論VB的版本,這個(gè)窗口的樣式是大同小異的,請(qǐng)見圖5—1。

前面說過,菜單相當(dāng)于簡(jiǎn)單的按鈕,它有幾個(gè)屬性,其中的大部分我

們都曾經(jīng)見過,包括Name、Caption、Index、Checked、Enabled、Visible、

快捷鍵和熱鍵等等。其中Name是必須的。下面請(qǐng)跟我一起設(shè)計(jì)第一個(gè)菜單。

首先在Caption添入"文件",Name為"mnuFile”,按下Next按鈕,

這樣就建立了第一級(jí)菜單,注意菜單設(shè)計(jì)窗口的左中有四個(gè)箭頭,按下向

右的箭頭,出現(xiàn)了一排小點(diǎn),如圖5—2,在VB里這叫縮排,這樣就可以開

始建立第二級(jí)菜單。

小知識(shí):實(shí)際上我們?cè)谏罹椭薪?jīng)常用到縮排,寫文章時(shí)開頭要空兩格就

是一種縮排,在編寫程序時(shí)更需要縮排,這樣使程序結(jié)構(gòu)化,便于觀察,

當(dāng)然菜單設(shè)計(jì)里的縮排有更多的用處。

接著填寫下一菜單項(xiàng),Caption為"新文件",Name為“mnuFileNew”,

按下Next鍵。

小知識(shí):VB一共如許建立6級(jí)子菜單,如圖5—3,盡量不要建立這樣的菜

單,要知道藏在越深處的菜單項(xiàng)越難以被人發(fā)現(xiàn),一個(gè)友好的程序界面應(yīng)

該讓用戶馬上找到需要的命令。

接著重復(fù)以上步驟,創(chuàng)建以下三個(gè)菜單項(xiàng):

Caption保存

NamemnuFileSave

Level1

Caption另存為

Name

mnuFileSaveAs

Level1

Caption載入

NamemnuFileLoad

Level1

我們?cè)诓藛卫镞€經(jīng)??吹桨巡煌?xiàng)分開的分隔條,在VB里也很容易做

到,把Caption設(shè)為"-"(減號(hào)),Name為mnuBarl。最后增加這個(gè)菜單

條的最后一項(xiàng),Caption為"退出",Name為mnuFileExit?,F(xiàn)在可以退出

菜單設(shè)計(jì)窗口,菜單如圖5—4。

怎么樣,經(jīng)過幾章的學(xué)習(xí),是不是覺得Windows世界也不是那么神秘?

也對(duì),也不對(duì)。的確,我們很輕易的實(shí)現(xiàn)了這么多的功能,但如果你仔細(xì)

想想,我們的程序還什么也不會(huì)做呢!可以說是徒有其表,要實(shí)現(xiàn)強(qiáng)大的

功能,恐怕要學(xué)很長(zhǎng)很長(zhǎng)時(shí)間,而現(xiàn)在僅僅是個(gè)開頭,并不是想入非非的

時(shí)候,我們還要繼續(xù)努力!

現(xiàn)在再次按下Ctrl+E,重回菜單設(shè)計(jì)窗口,接著添加菜單。(按下向

左的箭頭,可以使菜單上升一級(jí),Level代表菜單的級(jí)別),根據(jù)下表添加

新的菜單項(xiàng):

Caption編輯

NamemnuEdit

Level0

Caption剪切

NamemnuEditCut

Level1

Short-CutCtrl+X

Caption復(fù)制

NamemnuEditCopy

Level1

Short-CutCtrl+C

Caption粘貼

NamemnuEditPaste

Level1

Short-CutCtrl+V

Caption關(guān)于

NamemnuAbout

Level0

其中Short-Cut就是平常我們說的熱鍵,你可以在菜單設(shè)計(jì)窗口中找

到,設(shè)置一個(gè)你需要的組合鍵,這樣不論窗口的焦點(diǎn)處于何處,菜單在第

幾層,只要按下熱鍵,就相當(dāng)于調(diào)用了該項(xiàng)的Click事件。結(jié)果如圖5—5。

從Win95以來程序里引入了鼠標(biāo)右鍵功能,使鼠標(biāo)有了更大的用處,

在VB里我們也很容易實(shí)現(xiàn)。

打開Form_MouseDown事件,該事件有兩個(gè)參數(shù):Button,當(dāng)按下左鍵

時(shí)Button返回1,當(dāng)按下右鍵時(shí)Button返回2,;Shift,是指在點(diǎn)擊鼠

標(biāo)時(shí)按下的鍵盤鍵,如Shift、Ctrl、Alt,這些我們將在以后討論,但很

難避免在一章中不涉及到不該涉及的內(nèi)容,學(xué)習(xí)時(shí)有個(gè)大概的理解即可。

下面在該事件里添加代碼(效果如圖5—6):

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,X

AsSingle,YAsSingle)

IfButton=2Then

PopupMenumnuEdit,vbPopupMenuLeftAlign

Else

ExitSub

EndIf

EndSub

在上面的代碼中我們用到了PopupMenu方法,它的語法是:

object.PopupMenu菜單名,標(biāo)記,X坐標(biāo),Y坐標(biāo)

標(biāo)記是用來表明彈出菜單位于鼠標(biāo)指針位置的,它有三個(gè)值:

vbPopupMenuLeftAlign位于鼠標(biāo)左

vbPopupMenuRightAlign位于鼠標(biāo)右

VbPopupMenuCenterAlign位于鼠標(biāo)中

X、Y值可以用來制定菜單彈出的位置,可以省略。

關(guān)于菜單的Visible、Enabled等屬性請(qǐng)自己嘗試。

第六章輸入(一)

我們?yōu)槭裁匆O(shè)計(jì)計(jì)算機(jī)程序呢,當(dāng)然是為了計(jì)算機(jī)能為我們完成工

作,但是要完成不同的任務(wù),我們就必須對(duì)計(jì)算機(jī)下達(dá)命令,然后計(jì)算機(jī)

在把信息返饋回來一一任務(wù)是否完成。以上就是所謂的人機(jī)對(duì)話或交互功

能,尤其是在Windows操作里我們需要進(jìn)行更多的輸入工作,我們需要填

寫各種各樣的表格,設(shè)置程序的重要參數(shù),把數(shù)據(jù)輸入給計(jì)算機(jī),再又它

完成既定的工作就是今天我們本章要重點(diǎn)討論的問題一一在VB中如何建立

完整的輸入機(jī)制。

在VB中提供了一個(gè)函數(shù)InputBox能幫助我們建立一個(gè)最簡(jiǎn)單的輸入

窗體,語法如下:

InputBox

(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

該函數(shù)返回一個(gè)字符串表達(dá)式,其參數(shù)含義為:(“□”表示可缺省)

prompt一一字符串表達(dá)式,最大長(zhǎng)度為1024字符,窗體上的提示部分。

Title一一字符串表達(dá)式,顯示標(biāo)題欄里的文本。

Default一一字符串表達(dá)式,窗體中文本框的缺省值。

xpos,ypos數(shù)值表達(dá)式,以Twips為單位指定窗體出現(xiàn)在屏幕上的位

置。

helpfile——字符串表達(dá)式,是幫助文件的完整路徑。

Context——數(shù)值表達(dá)式,指定適合的幫助主題。

可能你看了上面的說明并不明白,那么下面我們就用Input語句完成一個(gè)

最簡(jiǎn)單的程序。

小知識(shí):屏幕坐標(biāo)

在計(jì)算機(jī)的屏幕上也有一個(gè)類似于我們?cè)谥袑W(xué)里常用到的直角坐標(biāo)系,之

不過它的原點(diǎn)不在左下,而是在屏幕的右上角,屏幕的最右上方坐標(biāo)為(0,

0),它的橫坐標(biāo)和我們的習(xí)慣是一致的,而縱坐標(biāo)則是越向下越大,不僅

是屏幕,所有的對(duì)象里都是一樣,需要記清。見圖6—1

(0,0)X

新建一個(gè)項(xiàng)目(project),在Form_load里填寫一行代碼:

a$=InputBox(〃舉薦你最欣賞的網(wǎng)站〃,〃最佳網(wǎng)站投票“,〃VB小驛〃)'

按下F5運(yùn)行程序,在Forml出現(xiàn)之前先會(huì)彈出一個(gè)輸入對(duì)話框,如圖

6-2o這時(shí),無論你按下0K還是Cancel都是沒有區(qū)別的,因?yàn)槲覀儾]

有對(duì)輸入數(shù)據(jù)進(jìn)行處理,下面我們完成一個(gè)更加復(fù)雜些的程序。

新建一個(gè)項(xiàng)目文件,把窗口布局成類似于圖6—3的結(jié)構(gòu),各對(duì)象屬性如下

表:

FormlCaption"最佳網(wǎng)站投票

演示”

BorderStyle3'不可調(diào)

整大小

ControlBoxO'False

Frame1Caption"輸入框?qū)傩浴?/p>

Label1Autosize1'True

Index0至5

0至5Caption”提示語

句”

“標(biāo)題”

“缺省網(wǎng)站”

“X坐標(biāo)”

“Y坐標(biāo)”

a,,

Index4EnabledFalse

Index4EnabledFalse

TextlText'(空字符串)

Index0至4

Index3Text0

Index4Text0

ChecklCaption"指定輸入框位

置”

ButtonlIndex0,1

Index0Caption”顯示

輸入框”

1Caption“退出程序”

本例中出現(xiàn)了一個(gè)Framel控件,它是一種框架,可以用來把窗體分成

好幾個(gè)部分,首先應(yīng)該在窗體上畫出Framel控件,然后再選擇相應(yīng)的控件,

在Framel上描出輪廓,使其是出現(xiàn)在Framel之上,本例中除去兩個(gè)按鈕,

其余都在Framel上面。本例中用到了幾組控件數(shù)組,其創(chuàng)建方法是,在選

定的點(diǎn)右鍵,選擇Copy,再在窗體其他部位單擊右鍵,選擇Paste即可,

注意,若要使粘貼的對(duì)象在Framel上,請(qǐng)?jiān)贔ramel上單擊右鍵選擇Paste。

我們通過這個(gè)窗體,對(duì)輸入框進(jìn)行完整的控制,原理是這樣的:當(dāng)我

們把窗體中要填寫的對(duì)輸入框的參數(shù)完成后按下0K按鈕,就會(huì)出現(xiàn)我們?cè)O(shè)

計(jì)的那個(gè)輸入框,我們從輸入框退出時(shí)則返回我們投票的結(jié)果,代碼如下.

窗體初次被裝入時(shí),Labe11(3).Label(4)和Text1(3)、Textl(4)的

Enabled屬性都是False,我們需要通過改變Checkl的Value(1,被選中,

0,未選中)是他們有效或無效。

聲明全局變量(General):

DimPosChkAsBoolean檢查X、Y坐標(biāo)是否有效

Checkl_Click事件:

PrivateSubCheckl_Click()

IfCheckl.Value=1Then

Label1(3).Enabled=True

Label1(4).Enabled=True

Textl(3).Enabled=True

Textl(4).Enabled=True

PosChk=True

Else

Label1(3).Enabled=False

Label1(4).Enabled=False

Textl(3).Enabled=False

Textl(4).Enabled=False

PosChk=False

EndIf

EndSub

接著在按鈕中填寫代碼:

PrivateSubCommand1Click(IndexAsInteger)

DimPrompt,Title,DefaultAsString

DimxPos,yPosAsInteger

SelectCaseIndex

Case0

Prompt=Textl(0).Text

Title=Textl(1).Text

Default=Textl(2).Text

IfPosChkThen

xPos=Vai(Textl(3).Text)

yPos=Vai(Textl(4).Text)

a$=InputBox(Prompt,Title,Default,xPos,yPos)

Else

a$=InputBox(Prompt,Title,Default,xPos,yPos)

EndIf

Labell(5).Caption=〃謝謝您的投票,您的選擇是"&a$&”!"

Case1

UnloadMe

EndSelect

EndSub

按下F5運(yùn)行程序,你會(huì)看到這樣的結(jié)果。圖6—4,6—5。是不是有種受騙

的感覺,啊喲喲,可不是我的錯(cuò),就是這么容易嘛!

從剛才的例子里,我們接觸了一些VB中的輸入方法,其實(shí)數(shù)據(jù)輸入不

僅僅局限于向Text框中輸入數(shù)據(jù),數(shù)據(jù)的輸入還有許多其他的方法,譬如

前面的Checkl也是向程序發(fā)出一定的信息,只要是通過操作向計(jì)算機(jī)發(fā)布

命令就可以叫做輸入,下面我們來一一介紹。

首先要介紹的當(dāng)然是輸入用到最多的Text框。Text沒有Click事件,

它的缺省事件是Change,也就是當(dāng)Text框里的一旦內(nèi)容改變就會(huì)激發(fā)該事

件發(fā)生,還是讓我們用實(shí)例說話吧。

Text有幾個(gè)特殊的屬性,一是MultiLine(多行)屬性,MultiLine屬

性為False的時(shí)候,不論文本有多長(zhǎng),它都會(huì)在一行里顯示下去,換行符

無效,當(dāng)它為True的時(shí)候,字符串顯示到Text框邊緣的時(shí)候就會(huì)自動(dòng)換

行。另一個(gè)與之配合的屬性是ScrollBars屬性,它有4個(gè)值,。到3,分

別是沒有滾動(dòng)條,水平滾動(dòng)條,垂直滾動(dòng)條,和二者都有,它是一個(gè)只讀

屬性,也就是說只有在程序設(shè)計(jì)過程中才能改變,而不能在程序運(yùn)行中改

變,但是我們可以通過API解決運(yùn)行中改變的問題,我們放在以后再講。

Passwordchart屬性,我們經(jīng)常在程序操作中遇到要填寫密碼的部分,為了

保密起見,在屏幕上顯示的字符一般“*”表示,并且這時(shí)是無法用剪貼板

的,這在VB中非常容易做到,把Passwordchart中設(shè)一個(gè)用來代替字符串

的字符即可,并不一定是哦。

下面我們完成一個(gè)有趣的小程序,是我以前遇到過的一個(gè)程序,我對(duì)

其進(jìn)行了部分修改。程序的意思是這樣的,假設(shè)你是一個(gè)司機(jī)應(yīng)超速被警

察扣留,現(xiàn)在需要你向警察陳述你的理由,如果你的話能打動(dòng)他,就可以

免交罰金,如果你在規(guī)定的字?jǐn)?shù)里沒有說出什么有震撼力的話,那老兄你

可就慘了,交錢吧。J

這個(gè)程序比原來的英文程序有了幾點(diǎn)不同,第一,由于用到的是雙字

節(jié)中文的中文,所以對(duì)于檢測(cè)中文字符和英文有很大不同,第二,原來的

英文程序不管你說多少,警察依然是依法從事,本例中給了犯規(guī)者10%的免

罰機(jī)會(huì)(有點(diǎn)無聊……L,不過也是為了學(xué)一些東東嘛)。下面就跟我來

設(shè)計(jì)窗體吧。(如圖6—6)

FormlIconStop圖標(biāo)

Caption停車檢查

BorderStyle3

Label1Caption警官,我超速是有原因的,

請(qǐng)聽我說:

BackColor&H00808080&

ForeColor&H80000012&

Labe12Caption你必須在30字之內(nèi)完成你

理由的申訴,否則將受到罰款!

BackColor&H00808080&

ForeColor&H00FF0000&

TextlMultiLinkTrue

Text"”

PicturelAutosizeTrue

BackColor&H00808080&

VisibleTrue

Picture2AutosizeTrue

BackColor&H00808080&

VisibleFalse

PicturesAutosizeTrue

BackColor&H00808080&

VisibleFalse

Command1VisibleFalse

三個(gè)圖片框Picture1—3的Picture屬性分別為綠燈,黃燈和紅燈,

這些圖標(biāo)在VB目錄下的Graphics\Icons\Traffic下(VB5),或是VB目

錄下的Icons\Traffic下(VB4、VB3),你還可以為L(zhǎng)abel1在Font屬性

里選一個(gè)合適的字體和字重。下面我們來看代碼:

首先初始化程序:

PrivateSubForm_Load()

'把Command1放在水平的中央

Command1.Top=Label2.Top+200

Command1.Left=(Forml.Width-Command1.Width)/2

'重疊三個(gè)圖片框

Picture2.Left=Picturel.Left

Picture2.Top=Picturel.Top

Picture3.Left=Picturel.Left

Pictures.Top=Picturel.Top

EndSub

下面我來講一講程序是怎樣運(yùn)行的,我們將用到Text的Change事件,

每當(dāng)字符串改變一次就對(duì)它進(jìn)行一次檢查,算出已經(jīng)說的字?jǐn)?shù),當(dāng)字?jǐn)?shù)超

過10時(shí),下面的紅綠燈會(huì)變成黃色,并且在這時(shí)隨機(jī)抽取一個(gè)數(shù),它在一

個(gè)范圍內(nèi)出現(xiàn)的可能是10%,如果在這個(gè)范圍內(nèi)就可以免交罰金,如果不在

范圍則繼續(xù),當(dāng)文字超過20的時(shí)候,紅綠燈會(huì)變成紅色,再一次抽取隨機(jī)

數(shù)字,步驟同上,如果30個(gè)字已滿,再進(jìn)行一次檢查,如果你真的那么不

幸就該罰款了。

程序的步驟清楚了,我們?cè)趤砜纯闯绦虻囊c(diǎn)。由于中文是雙字節(jié)字

符,也就是說一個(gè)漢字占兩個(gè)ASC碼的位置,而VB顯然是為英語國(guó)家設(shè)計(jì)

的用Len函數(shù)無法返回漢字字節(jié),也就是說一個(gè)漢字和和一個(gè)ASC字符在

Len函數(shù)中得到的值是一樣的,這就需要特殊處理。用Asc()函數(shù),在括

號(hào)內(nèi)放入一個(gè)ASC字符或字符串,它會(huì)把第一個(gè)ASC碼轉(zhuǎn)化為0—255的數(shù)

值,而把一個(gè)漢字放入,它的值必然不在0—255,這也就可以作為判定漢

字的基礎(chǔ)。我們可以把英文算作半個(gè)漢字。

第六章輸入(二)

下面我們來看看代碼:

在General里聲明窗體級(jí)變量:

DimLevelAsInteger

PrivateSubCommand1Click()

UnloadMe

EndSub

PrivateSubTextlChange()

DimStrLengthAsInteger*字符串長(zhǎng)度

DimRandomNumAsSingle,隨機(jī)數(shù)

DimStrlAsString

DimaAsString

Dimi,Temp

StrLength=O'每次開始時(shí)把字符串長(zhǎng)度還原為0

a=Textl.Text

Fori=1ToLen(a)'Len(a)代表字符串的長(zhǎng)度

Temp=Asc(Mid$(a,i,1))'挨個(gè)取字符

IfTemp>255OrTemp<0Then,不是ASC碼

StrLength=StrLength+2

Else

StrLength=StrLength+1

EndIf

Nexti

StrLength=StrLength/2

SelectCaseStrLength

Case0To9

Picturel.Visible=True

Picture2.Visible=False

Pictures.Visible=False

Label2.Caption="慢慢說。你還有“&Str(30-StrLength)&”個(gè)字可

以說〃

Level=1

Case10To19

IfLevel=1Then

RandomNum=Rnd*10'得到隨機(jī)數(shù)

IfRandomNum<=10AndRandomNum>9Then

Textl.Enabl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論