- Visual Basic學(xué)習(xí)手冊
- 鞏建華 孫秀梅 安劍等編著
- 1889字
- 2018-12-27 17:51:20
第3章 掌握Visual Basic語言基礎(chǔ)
(名師課堂:1小時27分)
Visual Basic 6.0是一個功能強(qiáng)大、使用方便、容易上手的工具,使用它編寫應(yīng)用程序,熟悉Visual Basic開發(fā)環(huán)境是第一步,掌握Visual Basic語言是基礎(chǔ),只有打好基礎(chǔ),循序漸進(jìn)地學(xué)習(xí),實(shí)際運(yùn)用時才會得心應(yīng)手。本章首先介紹組成Visual Basic語言的基本元素,包括關(guān)鍵字和標(biāo)識符,數(shù)據(jù)類型,變量和常量,運(yùn)算符和表達(dá)式以及代碼編寫規(guī)則。
通過學(xué)習(xí)本章,讀者可以達(dá)到以下學(xué)習(xí)目的:
了解面向?qū)ο蟮母拍睿?/span>
了解VB的關(guān)鍵字和標(biāo)識符;
掌握基本數(shù)據(jù)類型,了解記錄類型和枚舉類型;
掌握變量和常量;
掌握運(yùn)算符和表達(dá)式;
了解代碼編寫規(guī)則。
3.1 簡述對象概念
專題講座:光盤文件\MR\Video\3\對象概念.exe
視頻速遞:詳細(xì)講解對象的概念
Visual Basic程序設(shè)計(jì)語言是基于面向?qū)ο蟮目梢暬绦蛟O(shè)計(jì)語言,采用了一些面向?qū)ο蟮木幊碳夹g(shù)。在進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)前,首先要了解對象的概念及相關(guān)的屬性、方法和事件。
3.1.1 什么是對象
對象是源自于對現(xiàn)實(shí)世界的描述,是程序設(shè)計(jì)中相對獨(dú)立的基本實(shí)體,是代碼和數(shù)據(jù)的集合。任何事物都可以看做是“對象”。“類”是同種事物的總稱。例如:松樹是一個類,每一個松樹就是一個具體的對象;凳子是一個類,每一個具體的凳子就是一個對象;房子是一個類,每一個具體的房子就是一個對象,如圖3.1所示。

圖3.1 生活中的對象
在Visual Basic中,對象分為系統(tǒng)預(yù)定義對象和用戶自定義對象兩類。工具箱中的控件被創(chuàng)建在窗體上后成為真正的對象。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,每一個實(shí)體都可以稱之為對象,窗體和控件是程序設(shè)計(jì)中最常使用的對象。它可以通過屬性、方法、事件三個方面來全面地進(jìn)行描述。
其中,屬性是描述對象的數(shù)據(jù);方法告訴對象應(yīng)該做的事情;事件是對象所產(chǎn)生的事情,事件發(fā)生時可以編寫代碼進(jìn)行處理。
『名詞解釋』
對象:“對象”是一個很廣義的概念,在現(xiàn)實(shí)世界中的一切都可以看做是對象,比如一個人、一本書等。在計(jì)算機(jī)中,“對象”可以視為一個單元的代碼和數(shù)據(jù)的組合。對象可以是一段應(yīng)用程序,如控件或窗體。Visual Basic對象具有屬性、方法和事件三個特點(diǎn)。
3.1.2 熟悉對象的屬性
屬性是指一個對象的性質(zhì)和特性,與物體一樣,不同的對象擁有不同的特征,屬性就是以數(shù)值、字符串等形式描述這些特征的。在Visual Basic中,常見的屬性有標(biāo)題(Caption)、名稱(Name)、顏色(Color)、字體大小(FontSize)、是否可見(Visible)等。這些屬性決定了對象在界面中具有的外觀及功能。在程序設(shè)計(jì)時,需要合理、正確地設(shè)置對象的屬性值。下面描述了現(xiàn)實(shí)世界中一個“汽車”對象的屬性,如圖3.2所示。

圖3.2 一個“汽車”對象的屬性(靜態(tài)特性)
讀者可以根據(jù)現(xiàn)實(shí)世界中對象的屬性來理解程序設(shè)計(jì)中對象的屬性。在Visual Basic中設(shè)置對象的屬性可以通過屬性窗口來完成,也可以在代碼窗口中通過輸入語句來進(jìn)行設(shè)置。
語法:
對象名.屬性名稱=新設(shè)置的屬性值
例如,將窗體frm_main的Caption屬性值設(shè)置為“采購管理系統(tǒng)”,其對應(yīng)的語句為:
frm_main.Caption = "采購管理系統(tǒng)"
編程技術(shù):對象的屬性
屬性是一個對象所具有的靜態(tài)性質(zhì)、特征。
對象屬性的設(shè)置:(1)在屬性窗口中設(shè)置;(2)在程序代碼中設(shè)置。代碼中設(shè)置格式:對象名.屬性名 = 屬性值
3.1.3 理解對象的方法
方法是對象可以執(zhí)行的操作,也就是說當(dāng)給對象一個命令后,對象所做出的相應(yīng)動作或反應(yīng)就是對象的一個方法。它是用戶可以使用對象名直接調(diào)用的通用子程序。下面描述了現(xiàn)實(shí)世界中一個“汽車”對象的方法,如圖3.3所示。

圖3.3 一個“汽車”對象的方法(動態(tài)特性)
根據(jù)方法是否有返回值,調(diào)用對象方法有以下兩種方式。
1.有返回值
如果使用對象的方法有返回值,則需要把參數(shù)用括號括起來,其調(diào)用語法如下:
變量名稱=對象名稱.方法名稱(參數(shù)列表)
例如,使用Point方法獲取窗體中某個位置的顏色,代碼如下:
FormColor1=Form1.Point(25,53)
學(xué)習(xí)手冊
說明 對象的方法如果有多個參數(shù),參數(shù)之間應(yīng)該用逗號分隔。
2.無返回值
如果使用的方法沒有返回值或不使用返回值,其調(diào)用語法如下:
對象名稱.方法名稱
例如,使用SetFocus方法,獲取Text2焦點(diǎn),其代碼如下:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode=vbKeyReturn Then
Text2.SetFocus 'Text2獲得焦點(diǎn)
End If End Sub
學(xué)習(xí)手冊
注意 在調(diào)用對象方法時,若省略對象名,那么程序?qū)旬?dāng)前窗體作為對象。
編程技術(shù):對象的方法
方法是一個對象所具有的動作和行為。
方法的設(shè)置格式:對象名.方法名稱
在Visual Basic 6.0中,方法是系統(tǒng)預(yù)先規(guī)定好的函數(shù)和過程。用戶只能調(diào)用方法,方法只能在代碼中使用。
3.1.4 了解對象的事件
事件是對象能夠識別并做出反應(yīng)的外部刺激,主要作用是傳遞信息。在Visual Basic中,事件是由Visual Basic預(yù)先編輯完成的代碼所提供的操作。如在鍵盤上按下某鍵或鼠標(biāo)的單擊操作等都稱之為一個事件。用戶編寫事件過程的程序段,只有在觸發(fā)到該事件時才會被激活。下面描述了現(xiàn)實(shí)世界中一個“汽車”對象的事件,如圖3.4所示。

圖3.4 一個“汽車”對象的事件
用戶的每一個動作都是通過事件反應(yīng)給系統(tǒng)的,從而決定程序的運(yùn)行流程,形成了適合圖形用戶界面編程方式的事件驅(qū)動機(jī)制。這也是Visual Basic系統(tǒng)的一個顯著特點(diǎn)。
不同的對象具有不同的事件,常見的事件有單擊(Click)、雙擊(DblClick)、改變(Change)和裝載(Load)等。
當(dāng)在對象上發(fā)生了事件后,應(yīng)用程序?qū)@個事件所能做出的反應(yīng)以及處理步驟就是事件過程。在Visual Basic中設(shè)計(jì)程序的主要工作就是為對象編寫事件過程的程序代碼。
語法:
Private Sub對象名稱_事件名稱() '事件響應(yīng)程序代碼 End Sub
對象名稱:對象的Name屬性。
事件名稱:由Visual Basic預(yù)先定義好的賦給該對象的事件,并且該事件必須是對象所能識別的。
例如,在鼠標(biāo)單擊事件下實(shí)現(xiàn)鎖定Text1控件,設(shè)置“刪除”、“保存”等按鈕不可用,“添加”按鈕可用。其實(shí)現(xiàn)的代碼如下:
Private Sub Cmd_cancel_Click()
Text1.Locked=True '鎖定文本框
Cmd_del.Enabled=False '“刪除”按鈕不可用
Cmd_save.Enabled=False '“保存”按鈕不可用
Cmd_add.Enabled=True '“添加”按鈕可用
Cmd_edit.Enabled=False '“編輯”按鈕不可用
End Sub
3.2 了解語句組成要素
專題講座:光盤文件\MR\Video\3\語句組成要素.exe
視頻速遞:詳細(xì)講解關(guān)鍵字和標(biāo)識符
語句是Visual Basic程序中最小可執(zhí)行單元,每一行程序都可以稱為一個語句。一個語句基本由常量、特殊符號、關(guān)鍵字和表達(dá)式組成。
3.2.1 認(rèn)識Visual Basic中的關(guān)鍵字
關(guān)鍵字和標(biāo)識符是Visual Basic 6.0代碼中的一部分。關(guān)鍵字是指系統(tǒng)使用的具有特定含義的字符(如定義變量時使用的Dim語句),不能用做其他用途。關(guān)鍵字就像已經(jīng)在國際上被注冊了的各種商標(biāo),他們的圖標(biāo)和名字已經(jīng)被占用,其他任何企業(yè)和個人不得使用,因?yàn)樵撋虡?biāo)已經(jīng)在國際上被占用。而Visual Basic 6.0中的關(guān)鍵字已經(jīng)被系統(tǒng)所占用,并賦予特定的含義,所以我們在開發(fā)程序的過程中不能將關(guān)鍵字作為其他用途。
常用的關(guān)鍵字有Dim、Private、Sub、Public、End、If、Else、Form、Me、Single、As、Integer、Unload、Do、While、MessageBox等。
『名詞解釋』
關(guān)鍵字:Visual Basic中一些賦予特定的含義,用做專門用途的字符串稱為關(guān)鍵字。在Visual Basic集成開發(fā)環(huán)境中,會將關(guān)鍵字用特殊的方式標(biāo)出。
3.2.2 掌握標(biāo)識符的使用
在Visual Basic 6.0中所有的常量、變量、模塊、函數(shù)、類、對象及其屬性等都有各自的名稱,這些名稱就是標(biāo)識符。因此,標(biāo)識符就是指用于在編寫代碼時定義的名稱。標(biāo)識符可以理解為在程序中任何需要我們自己給它起名字的地方,這些我們自己給其起的名字就是標(biāo)識符,例如:常量Pi、變量person_count、函數(shù)名BubbleSort、模塊名connect_database、類名person和對象名zhangsan等。標(biāo)識符就像在生活中我們每個人、每一件物品都有自己的名字一樣。
例如,在一個Visual Basic 6.0工程中有如下標(biāo)識符:
◆ 工程1:表示一個工程的標(biāo)識符。
◆ Form1:表示一個窗體的標(biāo)識符。
◆ Class1:表示一個類模塊的標(biāo)識符。
◆ Module1:表示一個模塊的標(biāo)識符。
用戶也可以自己定義標(biāo)識符來標(biāo)示變量等的名稱,這些用戶自定義標(biāo)識符需要符合一定的命名規(guī)則,就像我們起名字的時候,是把姓放在前面,名字放在后面,而國外是將名字放在前面,姓放在后面,這些都屬于命名規(guī)則。
用戶在定義標(biāo)識符時需要遵守以下的原則:
(1)不能使用系統(tǒng)關(guān)鍵字。
(2)自定義的標(biāo)識符必須以字母開頭,以數(shù)字、大小寫字母、下畫線或者$符號結(jié)尾。
(3)標(biāo)識符的長度不能超過255個字符,而對于控件、窗體、模塊和類模塊等的名字則不能超過40個字符。
(4)不區(qū)分字母大小寫。
(5)在同一個作用域中不能出現(xiàn)同名的自定義標(biāo)識符。
下面是合法標(biāo)識符:
name user_age $page
下面是非法標(biāo)識符:
4word String #$##
『名詞解釋』
標(biāo)識符:Visual Basic 6.0中為各種常量、變量、模塊、函數(shù)、類和對象等要素命名時使用的字符序列稱為標(biāo)識符。也可以理解為凡是自己可以起名字的地方都叫做標(biāo)識符,都遵循標(biāo)識符的命名規(guī)定。
3.3 掌握數(shù)據(jù)類型
專題講座:光盤文件\MR\Video\3\數(shù)據(jù)類型.exe
視頻速遞:詳細(xì)講解數(shù)據(jù)類型
“數(shù)據(jù)”是信息在計(jì)算機(jī)內(nèi)的表現(xiàn)形式,也是程序的處理對象。不同類型的數(shù)據(jù)有不同的操作方式和不同的取值范圍。Visual Basic 6.0具有系統(tǒng)定義的基本數(shù)據(jù)類型,是Visual Basic 6.0中數(shù)據(jù)結(jié)構(gòu)的基本單元。Visual Basic 6.0還有兩種完全不同的數(shù)據(jù)類型:記錄類型和枚舉類型,它們的名稱及數(shù)據(jù)項(xiàng)由用戶任意定義。這兩個數(shù)據(jù)類型使得Visual Basic 6.0中的數(shù)據(jù)類型得以擴(kuò)展。下面給出數(shù)據(jù)類型的分類圖,如圖3.5所示。

圖3.5 數(shù)據(jù)類型分類圖
3.3.1 基本數(shù)據(jù)類型
Visual Basic 6.0提供的基本數(shù)據(jù)類型有字符型、數(shù)值型、布爾型和日期型,對于數(shù)值型數(shù)據(jù),考慮到運(yùn)算效率、所占空間及精度要求,又分為整數(shù)型、長整型、單精度型、雙精度型、貨幣型和字節(jié)型。另外,還有變體型和對象型,這兩種數(shù)據(jù)類型是實(shí)際編程過程中不常使用的。
有關(guān)基本數(shù)據(jù)類型的大體介紹如表3.1所示,其中加粗內(nèi)容是常用的數(shù)據(jù)類型。
表3.1 基本數(shù)據(jù)類型

下面詳細(xì)介紹常用的4種數(shù)據(jù)類型。
1.字符型
如果一個變量或常量包含字符串,就可以將其聲明為字符型,即String類型。字符串是用雙引號括起來的若干個字符。字符串中的字符可以是計(jì)算機(jī)系統(tǒng)允許使用的任意字符。例如,以下都是合法的Visual Basic 6.0字符串。
"VISUAL BASIC 6.0" "Welcome to Changchun" "吉林省長春市" "1+1=?" "8888" "***" ""(空字符串)
了解了字符串,再看一下在Visual Basic 6.0中如何聲明字符型變量。
實(shí)例位置:光盤\MR\ Instance\3\3.1
【例3.1】 聲明一個字符型變量A,代碼如下。
Private A As String
然后將字符串“吉林省長春市”賦予這個變量,并用字符串函數(shù)Right取右邊3個字符,最后輸出,代碼如下。
Private Sub Form_Load() A="吉林省長春市" '給字符型變量A賦值 A=Right(A,3) '用Right函數(shù)取右邊3個字符 MsgBox A '用Msgbox函數(shù)輸出字符型變量A End Sub
按【F5】鍵,運(yùn)行程序,結(jié)果為:長春市。
按照默認(rèn)規(guī)定,String變量或參數(shù)是一個可變長度的字符串,隨著對字符串賦予新數(shù)據(jù),它的長度可增可減。但也可以聲明固定長度的字符串,語法如下。
String * size
實(shí)例位置:光盤文件\MR\ Instance\3\3.2
【例3.2】 將【例3.1】中的變量A改為固定長度為4的字符型變量,代碼如下。
Private A As String*4 '聲明一個固定長度為4的字符型變量
此時將字符串“吉林省長春市”賦予這個變量,用Msgbox函數(shù)輸出,結(jié)果為“吉林省長”。這說明如果賦予字符串的長度大于4,就不是定長字符串了,則Visual Basic 6.0會直接截去超出部分的字符。反之,如果賦予字符串的長度少于4,則Visual Basic 6.0會用空格將變量A不足部分填滿。
學(xué)習(xí)手冊
說明 標(biāo)準(zhǔn)模塊中的定長字符串用Public或Private語句聲明。在窗體和類模塊中,必須用Private語句聲明定長字符串。
2.數(shù)值型
Visual Basic 6.0支持6種數(shù)值型數(shù)據(jù)類型,分別是整型(Integer)、長整型(Long)、單精度浮點(diǎn)型(Single)、雙精度浮點(diǎn)型(Double)、貨幣型(Currency)和字節(jié)型(Byte)。
如果知道變量總是存放整數(shù)(如88)而不是帶小數(shù)點(diǎn)的數(shù)字(如88.88),就應(yīng)當(dāng)將它聲明為Integer類型或Long類型。因?yàn)檎麛?shù)的運(yùn)算速度較快,而且比其他數(shù)據(jù)類型占據(jù)的內(nèi)存要少。在For…Next循環(huán)語句(將在第4章介紹)中作為計(jì)數(shù)器變量使用時,整數(shù)類型尤其重要。
浮點(diǎn)數(shù)值可以表示為mmmEeee或mmmDeee的形式,其中mmm是底數(shù),而eee是指數(shù)(以10為底的冪)。用E將數(shù)值文字中的底數(shù)部分或指數(shù)部分隔開,表示該值是Single類型;同樣,用D則表示該值是Double類型。
貨幣類型(Currency)的數(shù)值保留小數(shù)點(diǎn)后4位和小數(shù)點(diǎn)前15位,適用于金額計(jì)算。
學(xué)習(xí)手冊
說明 所有數(shù)值型變量都可以相互賦值。但浮點(diǎn)型或貨幣型數(shù)值賦予整型變量時,Visual Basic 6.0會自動將該數(shù)值的小數(shù)部分四舍五入之后去掉,而不是直接去掉。
例如:
Dim i As Integer
i = 2.6873453453
MsgBox I
‘輸出結(jié)果為3。
字節(jié)型(Byte)數(shù)據(jù)類型是指變量中存放的是二進(jìn)制數(shù)。在計(jì)算機(jī)中,經(jīng)常將用來存儲一個英文字母的8個二進(jìn)制數(shù)稱為是一個字節(jié)。一個英文字母無論大小寫,都占用一個字節(jié),而一個漢字占用兩個字節(jié)的空間。
3.布爾型
若變量的值只是True/False、Yes/No、On/Off等信息,則可將其聲明為布爾型,其默認(rèn)值為False。例如,定義一個布爾型變量,輸出該變量,代碼如下。
Dim mybln As Boolean
MsgBox mybln
‘輸出結(jié)果為False。
學(xué)習(xí)手冊
說明 布爾是英國的邏輯學(xué)家,為了紀(jì)念他在邏輯學(xué)方面的卓越貢獻(xiàn),人們就用他的名字來標(biāo)識邏輯變量。
4.日期型
日期型變量用來存儲日期或時間。可以表示的日期范圍為100年1月1日到9999年12月31日,時間則是從0:00:00到23:59:59。日期常數(shù)必須用“#”符號括起來。如果變量mydate是一個日期型變量,可以使用下面的幾種格式為該變量賦值。
mydate=#2/4/1977# mydate=#1977-02-04# mydate=#77,2,4# mydate=#February 4,1977#
以上表示的都是1977年2月4日,并且無論在代碼窗口中輸入哪條語句,Visual Basic 6.0都將其自動轉(zhuǎn)換為第一種形式,即mydate=#2/4/1977#。
實(shí)例位置:光盤文件\MR\ Instance\3\3.3
【例3.3】 賦予日期/時間變量的值與輸出的日期/時間格式不一定一致,這與系統(tǒng)區(qū)域和語言選項(xiàng)中的設(shè)置有關(guān),例如下面的代碼。
Private Sub Form_Load()
Dim mydate As Date '定義日期型變量
mydate=#2/4/1977# ' 給變量賦值
MsgBox mydate ‘ 輸出變量
End Sub
上述代碼輸出結(jié)果為77-02-04,原因是系統(tǒng)區(qū)域和語言選項(xiàng)中的短日期的格式為yy-mm-dd。
5.對象型
對象型用于存儲程序中的對象。使用4個字節(jié)(32位地址)保存與對象有關(guān)的數(shù)據(jù)信息。
6.變體型
變體型數(shù)據(jù)類型可以存儲所有系統(tǒng)定義的數(shù)據(jù)類型。變體型除了具有其他數(shù)據(jù)類型的特性外,還具有三個特殊的值:Empty、Null和Error。
(1)Empty
Empty是一個和0、零長度字符串或者Null值都不同的值。變體類型的數(shù)據(jù)在沒有賦值前默認(rèn)值為Empty。在使用時,可以使用IsEmpty函數(shù)來測試變量的值。
(2)Null
Null表示未知或者丟失的數(shù)據(jù),Null具有以下特性:
◆ Null值只能賦值給變體數(shù)據(jù),如果將其賦給非變體數(shù)據(jù)的變量,將會產(chǎn)生一個錯誤;
◆ 如果表達(dá)式中含有Null值,則整個表達(dá)式的計(jì)算結(jié)果為Null。
(3)Error
在變體變量中Error是一個特殊的值,用來標(biāo)示已經(jīng)發(fā)生過的過程中的錯誤狀態(tài)。
3.3.2 記錄類型
3.3.1節(jié)中介紹的各種數(shù)據(jù)類型是由系統(tǒng)設(shè)定的,下面介紹的數(shù)據(jù)類型將由用戶自定義。用戶自定義類型也稱做記錄類型,主要通過Type語句來實(shí)現(xiàn),其語法格式如下。
[Private|Public]Type 數(shù)據(jù)類型名
數(shù)據(jù)類型元素名As類型名
數(shù)據(jù)類型元素名As類型名
……
End Type
數(shù)據(jù)類型名是要定義的數(shù)據(jù)類型的名字;數(shù)據(jù)類型元素名不能是數(shù)組名;類型名可以是任何基本數(shù)據(jù)類型,也可以是用戶定義的類型。
學(xué)習(xí)手冊
說明 (1)Type語句只能在模塊級使用。使用Type語句聲明了一個記錄類型后,就可以在該聲明范圍內(nèi)的任何位置聲明該類型的變量。可以使用Dim、Private、Public、ReDim或Static語句來聲明記錄類型中的變量。
(2)在標(biāo)準(zhǔn)模塊中,記錄類型默認(rèn)設(shè)置是公用的。可以使用Private關(guān)鍵字來改變其可見性。而在類模塊中,記錄類型只能是私有的,且使用Public關(guān)鍵字也不能改變其可見性。
(3)在Type…End Type語句塊中不允許使用行號和行標(biāo)簽。
(4)用戶自定義類型經(jīng)常用來表示數(shù)據(jù)記錄,該數(shù)據(jù)記錄一般由多個不同數(shù)據(jù)類型的元素組成。
實(shí)例位置:光盤文件\MR\ Instance\3\3.4
【例3.4】 下面將使用Type語句聲明一個新的數(shù)據(jù)類型Sell,然后為該類型中的各個元素賦值,最后輸出,具體實(shí)現(xiàn)過程如下。
創(chuàng)建一個Visual Basic 6.0工程,在該工程中添加一個模塊,在該模塊的聲明部分編寫如下代碼。
Type Sell name As String * 20 standard As String * 10 price As Currency End Type
在窗體的Form_Load事件過程中聲明一個Sell類型mySell,然后為其各個元素賦初值,最后輸出,代碼如下。
Private Sub Form_Load() Dim mySell As Sell my Sell.name="Epson打印機(jī)" mySell.standard = "Epson Style C65" my Sell.price=450 MsgBox "產(chǎn)品名稱:" & mySell.name & Chr(10) & "產(chǎn)品型號:" & mySell.standard & Chr(10) & "單價(jià): " & mySell.price End Sub
按【F5】鍵,運(yùn)行程序,結(jié)果如圖3.6所示。

圖3.6 消息對話框
3.3.3 枚舉類型
枚舉是為一組整數(shù)值提供便于記憶的標(biāo)識符,它的作用是管理和使用常量。枚舉類型主要使用Enum語句來定義,語法如下。
[Private|Public]Enum 數(shù)據(jù)類型名
數(shù)據(jù)類型元素名 = 整型常數(shù)表達(dá)式
數(shù)據(jù)類型元素名 = 整型常數(shù)表達(dá)式
……
End Enum
其中的整型常數(shù)表達(dá)式可以是默認(rèn)的,默認(rèn)情況下,第一個數(shù)據(jù)類型元素取值從0開始,其余數(shù)據(jù)類型元素名依次為1,2,3,4,5,…,枚舉類型的實(shí)質(zhì)就是定義一個符號常量集,并用一個名稱表示該集合。
實(shí)例位置:光盤文件\MR\ Instance\3\3.5
【例3.5】 下面用Enum語句定義一個顏色類型,其中包括一些顏色常數(shù),可以用于設(shè)計(jì)數(shù)據(jù)庫的數(shù)據(jù)輸入窗體,代碼如下。
Public Enum myColors
myRose=&HE1E4FF ' 玫瑰紅
myGray=&H908070 ' 灰色
myBlue=&HFF901E ' 藍(lán)色
mySkyBlue=&HFFBF00 ' 天藍(lán)
my SpringGreen=&H7FFF00 '春天綠
my ForestGreen=&H228B22 '森林綠
End Enum
在窗體中調(diào)用該枚舉類型,設(shè)計(jì)文本框控件的前景色和窗體的背景顏色,關(guān)鍵代碼如下:
Private Sub Form_Load() Text1.ForeColor=myColors.myBlue '文本框前景色 Form1.BackColor=myColors.myRose '窗體的背景色 End Sub
程序的運(yùn)行效果如圖3.7所示。

圖3.7 枚舉類型的使用
3.4 學(xué)習(xí)使用變量
專題講座:光盤文件\MR\Video\3\變量.exe
視頻速遞:詳細(xì)講解變量的知識
前面介紹數(shù)據(jù)類型的同時,已經(jīng)簡單涉及了一些變量,這一節(jié)我們就詳細(xì)介紹一下變量的概念及聲明、變量的命名規(guī)則、變量的分類以及使用變量時的注意事項(xiàng)。
3.4.1 什么是變量
一個變量相當(dāng)于一個容器,這個容器對應(yīng)著計(jì)算機(jī)內(nèi)存中的一塊存儲單元,因此,它可以保存數(shù)據(jù)。下面通過舉例進(jìn)一步說明變量。
【例3.6】 有兩個存儲單元,分別為strUser和strPassword,存放的值分別為管理員、111,如圖3.8所示。

圖3.8 存儲管理員
也可以將這兩個存儲單元的值改為普通用戶、222,如圖3.9所示。

圖3.9 存儲普通用戶
例如,在計(jì)算員工加班費(fèi)時,使用的計(jì)算公式為:加班費(fèi)=8×加班小時數(shù)。這里面每小時的加班費(fèi)用是固定的,員工加班的小時數(shù)是不同的,所以每個人的加班費(fèi)也是不同的,這里面“加班小時數(shù)”和“加班費(fèi)”都是變量。計(jì)算過程如圖3.10所示。

圖3.10 加班費(fèi)的計(jì)算過程
綜上所述,變量也就是在程序運(yùn)行時其值在不斷發(fā)生改變的量,它在程序設(shè)計(jì)中是一個非常重要、非常關(guān)鍵的內(nèi)容。
『名詞解釋』
變量:Visual Basic變量是程序中最基本的存儲單元,其要素包括變量名,變量類型和作用域。從本質(zhì)上講,變量其實(shí)是內(nèi)存中的一小塊區(qū)域,使用變量名來訪問這塊區(qū)域。因此,每一個變量使用前必須先聲明,然后進(jìn)行賦值,才能使用(否則系統(tǒng)會自動賦予初始值)。
3.4.2 掌握變量的命名規(guī)則
為了便于在程序中區(qū)分和使用變量,必須給每一個變量進(jìn)行命名。在Visual Basic中,變量的命名要遵循以下規(guī)則。
(1)變量名只能由西文字母、漢字、數(shù)字及下畫線組成。
(2)變量名必須以西文字母或漢字開頭,最后一個符號可以是數(shù)據(jù)類型聲明符,如Dim a%,更多的數(shù)據(jù)類型聲明符可以參考表3.1。
(3)變量名長度可達(dá)255個字符,有效字符為40個。
(4)Visual Basic 6.0中的關(guān)鍵字不能作為變量名。例如,Print、Dim和For等都是非法變量名。
學(xué)習(xí)手冊
說明 雖然Visual Basic 6.0中的關(guān)鍵字不能作為變量名,但可以將關(guān)鍵字嵌入變量名中。例如,print是非法變量名,但print_3或print3都是合法的變量名。
(5)不能在變量名中出現(xiàn)標(biāo)點(diǎn)符號、空格或者嵌入!、@、#、$、%、&等字符。
(6)變量名在變量有效的范圍內(nèi)必須是唯一的,否則會出現(xiàn)“當(dāng)前范圍內(nèi)的聲明重復(fù)”的錯誤。
(7)變量名中不區(qū)分大小寫。
以上是變量的基本命名規(guī)則,在實(shí)際編程過程中,筆者建議變量名應(yīng)能對變量的含義具有一定的提示作用,且能反映變量類型及變量作用域,這樣可以增強(qiáng)程序代碼的可讀性。例如,可以將用來保存產(chǎn)品名稱的變量命名為strName,保存產(chǎn)品價(jià)格的變量命名為curPrice,保存用戶名的全局變量命名為gstrUserName。
3.4.3 聲明變量
在Visual Basic 6.0程序中,使用變量前,一般要先聲明變量的名稱和變量的數(shù)據(jù)類型,以決定系統(tǒng)為變量分配的存儲單元。下面介紹幾種方式來聲明變量及其數(shù)據(jù)類型。
1.用聲明語句顯式聲明變量
使用聲明語句聲明變量,也稱顯式聲明,語句格式如下:
Dim|Private|Static|Public變量名As數(shù)據(jù)類型
其中,變量名必須符合變量的命名規(guī)則,數(shù)據(jù)類型可以是Visual Basic 6.0的基本數(shù)據(jù)類型,也可以是記錄類型或枚舉類型。
關(guān)鍵字Dim、Private、Static和Public由符號“|”隔開,表示用戶在實(shí)際聲明變量中,可以從中任選其一。但選用不同的關(guān)鍵字,在程序的不同位置所定義的變量的種類和使用范圍是不同的,這是3.4.4節(jié)將要介紹的內(nèi)容。
【例3.7】 下面通過幾個例子,介紹如何顯式聲明變量。
聲明一個字符串變量、一個整型變量:
Dim Str As String Dim Int As Integer
使用數(shù)據(jù)類型的類型符號來替代As子句:
Dim Str$ Dim Int%
學(xué)習(xí)手冊
注意 變量名與數(shù)據(jù)類型符之間不能有空格。
一條Dim語句可以聲明多個變量,各變量之間以逗號隔開:
Dim Str As String , Int As Integer , Sng as Single
聲明指定字符串長度的字符型變量:
Dim Str1 As String*128
如果賦給字符串變量Str1的字符少于128個,則用空格填充變量Str1;如果賦給字符串變量Str1的字符大于128,則Visual Basic會自動截去超出部分的字符。
2.隱式聲明變量
在Visual Basic 6.0中,也可以不事先聲明而直接使用變量,這種方式稱為隱式聲明。上述使用Dim語句聲明變量的方式也可稱為顯式聲明。所有隱式聲明的變量都是變體型(Variant)數(shù)據(jù)類型,這一類型在3.3節(jié)中介紹過。
【例3.8】 聲明一個變量a,并為a賦值,代碼如下。
Dim a a=111
或直接使用:
a = 111
3.強(qiáng)制聲明變量(Option Explicit語句)
前面介紹了變量的兩種聲明方式,顯然隱式聲明用起來更方便,但如果變量名拼錯了,系統(tǒng)就會認(rèn)為它是另一個新的變量,從而引起潛在的錯誤。這時如果設(shè)置了強(qiáng)制聲明變量,就不會出現(xiàn)這種情況了。因?yàn)閺?qiáng)制聲明變量會在聲明段手動或自動地加入Option Explicit語句,如果程序中存在直接使用的變量,運(yùn)行程序后,系統(tǒng)就會提示“變量未定義”。
下面介紹如何強(qiáng)制聲明變量。強(qiáng)制聲明變量可以在聲明段手動添加Option Explicit語句,但這種方法很費(fèi)時,下面這種方法可以自動在聲明段添加Option Explicit語句,方法是:選擇“工具”→“選項(xiàng)”菜單命令,在“選項(xiàng)”對話框中,單擊“編輯器”選項(xiàng)卡,勾選“要求變量聲明”復(fù)選框,如圖3.11所示,此時Visual Basic 6.0會在以后的窗體模塊、標(biāo)準(zhǔn)模塊及類模塊中的聲明段自動插入Option Explicit語句,如圖3.12所示。但不會將它加入現(xiàn)有的模塊中,要想在現(xiàn)有的模塊中加入Option Explicit語句,還需要使用第一種方法,也就是在聲明段手動添加Option Explicit語句。

圖3.11 設(shè)置強(qiáng)制聲明變量

圖3.12 自動在聲明段加入Option Explicit語句
學(xué)習(xí)手冊
說明 如果要強(qiáng)制聲明變量,建議在開始程序設(shè)計(jì)時就在“選項(xiàng)”中設(shè)置“要求變量聲明”。
4.用DefType語句聲明變量
用DefType語句可以在標(biāo)準(zhǔn)模塊或窗體模塊的聲明部分定義變量,語句格式如下:
DefType 字母范圍
其中,Def是保留字,Type是數(shù)據(jù)類型標(biāo)志,它可以是Int(整型)、Lng(長整型)、Sng(單精度型)、Dbl(雙精度型)、Cur(貨幣型)、Str(字符型)、Byte(字節(jié)型)、Bool(布爾型)、Date(日期型)、Obj(對象型)、Var(變體型)。把Def和Type寫在一起就構(gòu)成了定義的類型關(guān)鍵字。
字母范圍用“字母-字母”的形式給出,例如:
DefLng i-l '凡是變量名以字母i到l開頭的變量均定義為長整型
學(xué)習(xí)手冊
注意 ① DefType語句只對它所在的模塊起作用。
② 當(dāng)使用DefType語句和使用類型說明符方式定義變量發(fā)生矛盾時,類型說明符定義變量的方式總是比DefType語句優(yōu)先起作用。
3.4.4 變量的作用域
一個變量被聲明后,并不是在任何地方都能使用。每個變量都有它的作用范圍,也就是作用域。例如在一個過程內(nèi)部聲明的變量,只在該過程內(nèi)部有效,一個模塊的通用聲明部分聲明的變量,只在該模塊內(nèi)的所有過程有效,而對于使用Public語句聲明的變量,不僅對于同一模塊內(nèi)的所有過程有效,甚至對于整個應(yīng)用程序的所有過程也都是有效的。
在Visual Basic 6.0中允許在聲明變量時指定它的范圍,主要包括局部變量、模塊級變量和全局變量,詳細(xì)介紹如表3.2所示。
表3.2 變量的作用域

【例3.9】 下面通過實(shí)例比較局部變量和模塊級變量的作用范圍。創(chuàng)建一個Visual Basic 6.0工程,在窗體的Form_Load事件過程中定義一個整型變量,并為其賦值,然后在文本框控件中的值發(fā)生改變時,顯示該變量的值,代碼如下。
Private Sub Form_Load() Dim intNumber As Integer intNumber =2 End Sub Private Sub Text1_Change() intNumber = intNumber + 1 MsgBox intNumber End Sub
按【F5】鍵,運(yùn)行程序,結(jié)果為1,由于變量intNumber是在Form_Load事件過程中定義的,因此決定它是一個局部變量,只在過程內(nèi)部有效,而Text1_Change事件過程中的intNumber變量被當(dāng)做一個新的變量,其初值為0,加1后結(jié)果為1。
將上述代碼中的Dim intNumber As Integer語句移到窗體的通用聲明部分,運(yùn)行程序,再看一下結(jié)果,其結(jié)果為3,由于變量intNumber已被放在窗體的通用聲明部分,因此決定它是一個模塊級變量,即在模塊內(nèi)的所有過程有效。Form_Load事件過程中變量intNumber的值為2,在Text1_Change事件過程中變量intNumber再加上1,那么結(jié)果就是3。
3.4.5 理解靜態(tài)變量的作用
在過程中,既可以使用Dim語句聲明局部變量,也可以使用Static語句聲明局部變量,并且Static語句的一般形式與Dim語句相同:
Static變量名As數(shù)據(jù)類型
使用Static語句聲明的變量稱為靜態(tài)變量,它與用Dim語句聲明的變量的不同之處在于:當(dāng)一個過程結(jié)束時,過程中所用到的靜態(tài)變量的值會保留,下次再調(diào)用該過程時,變量的初值是上次調(diào)用結(jié)束時被保留的值。
對于使用Dim語句聲明的局部變量,隨過程的調(diào)用而分配存儲單元,并進(jìn)行變量的初始化。一旦過程結(jié)束,變量的內(nèi)容自動消失,占用的存儲單元也被釋放。因此,每次調(diào)用過程時,變量都將重新初始化。
3.4.6 處理變量同名問題
如果不同模塊中的公用變量使用同一名字,則通過同時引用模塊名和變量名在代碼中進(jìn)行區(qū)分。例如,如果在Form1和Module1中都聲明了一個整型公用變量intNumber,則可以用Form1.intNumber和Module1.intNumber來區(qū)分這兩個同名的變量。
實(shí)例位置:光盤文件\MR\ Instance\3\3.10
【例3.10】 下面通過實(shí)例進(jìn)一步說明同名變量在程序中是如何區(qū)分的。
新建一個工程,在工程中添加三個窗體,默認(rèn)名稱為Form1、Form2和Form3。
在Form2中聲明第一個變量intX,然后在Form_Load事件過程中設(shè)置它的值。
Public intNumber As Integer ' 聲明Form2的intX變量 Private Sub Form_Load() intNumber=1 '設(shè)置Form2的intX變量的值 End Sub
在Form3中聲明第二個變量intX,它與Form2中的變量名字相同,同樣在Form_Load事件過程中設(shè)置它的值。
Public intNumber As Integer ' 聲明Form3的intX變量 Private Sub Form_Load() intNumber=2 '設(shè)置Form3的intX變量的值 End Sub
在Form1窗體中添加兩個按鈕,在它們的Click事件過程中編寫代碼,分別調(diào)用Form2和Form3窗體,并將這兩個窗體模塊中定義的變量用MsgBox顯示。
Private Sub Command1_Click() Form2.Show '調(diào)用Form2窗體 MsgBox Form2.intNumber ' 顯示Form2窗體的intX變量 End Sub Private Sub Command2_Click() Form3.Show '調(diào)用Form3窗體 MsgBox Form3.intNumber ' 顯示Form3窗體的intX變量 End Sub
按【F5】鍵,運(yùn)行程序,單擊兩個命令按鈕中的每一個按鈕,將看到兩個公用變量被分別引用。
3.4.7 情景應(yīng)用——實(shí)現(xiàn)兩個變量的交換(不借助第三個變量)
大家都知道,要想實(shí)現(xiàn)兩個變量的交換需要借助第三個變量,比如:有一瓶紅酒和一瓶可樂要交換,需要借助第三個瓶子。這里介紹一個不借助第三個變量來實(shí)現(xiàn)兩個變量交換的方法(這兩個變量是數(shù)值類型的)。下面通過一個實(shí)例講解如何實(shí)現(xiàn)兩個變量的交換(不借助第三個變量)。
實(shí)例位置:光盤文件\MR\ Instance\3\3.11
【例3.11】 當(dāng)兩個變量都為數(shù)值變量時,可以不借助第三個變量實(shí)現(xiàn)兩個變量的交換。不借助第三個變量實(shí)現(xiàn)兩個變量互換的算法為:首先將兩個數(shù)的和減去b的值賦給b,這個值就是原來a的值,然后將兩個數(shù)的和減去新得到的b的值賦給變量a,這個b的值是原來a的值,得到的值是原來b的值。程序的設(shè)計(jì)過程如下。
新建一個標(biāo)準(zhǔn)的exe工程。
在工程中創(chuàng)建一個窗體,使用窗體的默認(rèn)名,設(shè)置窗體的Caption屬性為“交換兩個變量的值”。
在窗體上添加4個Label控件,設(shè)置Label1的Caption屬性為“輸入a和b的值”,Label2的Caption屬性為“a”,Label3的Caption屬性為“b”,Label4的Caption屬性為空。將這幾個Label控件的BackStyel屬性設(shè)置為0-Transparent。
在窗體上添加兩個TextBox控件,命名為Txt_a和Txt_b。設(shè)置Text屬性為空。
在窗體上添加兩個CommandButton控件,使用默認(rèn)名,設(shè)置Caption屬性為“交換”和“退出”。
當(dāng)用戶在文本框中輸入兩個變量的值,單擊“交換”按鈕,實(shí)現(xiàn)將兩個變量的值交換,程序代碼如下:
Private Sub exchange() '交換 Dim a As Integer ' 定義變量a Dim b As Integer ' 定義變量b If IsNumeric(Txt_a.Text)Then ' 如果輸入的值是數(shù)值型數(shù) a=Val(Txt_a.Text) '將其賦給變量a Else '否則 MsgBox"請輸入數(shù)字!" '彈出提示對話框 Exit Sub '退出過程 End If If IsNumeric(Txt_b.Text)Then ' 如果輸入的值是數(shù)值型的數(shù) b=Val(Txt_b.Text) '將其賦給變量b Else '否則 MsgBox"請輸入數(shù)字!" '彈出提示對話框 Exit Sub '退出過程 End If a=a+b '將兩個數(shù)的和賦給a '將兩個數(shù)的和減去b的值賦給b,這個值就是原來的a的值 b = a – b '將兩個數(shù)的和減去新得到的b的值賦給變量a,這個b的值是原來a的值,得到的是值原來b的值 a = a – b Lbl_Info.Caption ="a的值是:"&a&" b的值是:"&b '在標(biāo)簽中輸出交換的結(jié)果 End Sub
3.5 學(xué)習(xí)使用常量
專題講座:光盤文件\MR\Video\3\常量.exe
視頻速遞:詳細(xì)講解常量的知識
熟悉了變量,接下來學(xué)習(xí)常量,常量與變量正好相反,它是程序設(shè)計(jì)時,值始終不發(fā)生改變的量。本節(jié)就常量的聲明及使用進(jìn)行介紹。
3.5.1 聲明常量
當(dāng)程序中有需要重復(fù)使用的常量時,可以使用Const語句聲明,語法如下。
Public/Private Const<常量名>[As<數(shù)據(jù)類型>]=<常量表達(dá)式>
參數(shù)說明:
Public:可選的參數(shù),用于聲明可在工程的所有模塊的任何過程中使用這個常量。
Private:可選的參數(shù),用于聲明只能在包含該聲明的模塊中使用常量。
常量名:必選的參數(shù),用于指定該常量名稱,必須是合法的Visual Basic標(biāo)識符。
數(shù)據(jù)類型:可選的參數(shù),也可以通過數(shù)據(jù)類型符號規(guī)定常量的類型。
常量表達(dá)式:必選的參數(shù),包括常量和操作符,但不包含變量,而且計(jì)算結(jié)果總是常值。
學(xué)習(xí)手冊
注意 在程序中如果改變已定義常量的值,則會出現(xiàn)錯誤提示。
例如:
Const PI As Single=3.14159265357 '聲明符號常量PI代替3.14159265357 Print 3*PI '結(jié)果為:9.42477796071
編程準(zhǔn)則:盡可能多的使用Const
Const關(guān)鍵字可以防止開發(fā)程序時錯誤的產(chǎn)生。例如,對于一些不需要改變的對象,使用Const關(guān)鍵字將其定義為常量,可以防止開發(fā)人員不小心修改對象的值,產(chǎn)生意想不到的結(jié)果。將函數(shù)返回的指針類型定義為Const指針,可以向其他人員表明不應(yīng)該修改函數(shù)的返回值,如果不進(jìn)行類型轉(zhuǎn)換,顯示地進(jìn)行修改,會出現(xiàn)編譯錯誤。如果在定義函數(shù)時,不希望在函數(shù)體中修改參數(shù)值,應(yīng)使用Const關(guān)鍵字將參數(shù)定義為常量參數(shù),防止用戶修改參數(shù)值。
3.5.2 局部常量和全局常量
在模塊級的聲明中Public和Private省略的情況下,系統(tǒng)默認(rèn)是Private。在模塊中使用Public語句聲明后的符號常量,就是一個全局常量,該常量可以在程序中所有模塊的過程中使用。同樣,用Private語句聲明過的常量就是局部常量。
例如:
Const MyVar=123 '默認(rèn)情況下常量是局部的 Public Const MyString="mr" ' 全局常量 Private Const MyInt As Integer=5 '聲明局部整型常量 Const MyStr="mr",MyDouble As Double=3.1415 '在一行中聲明多個常量
學(xué)習(xí)手冊
注意 全局常量必須在標(biāo)準(zhǔn)模塊中聲明。
3.5.3 情景應(yīng)用——使用自定義常量計(jì)算圓的面積
在開發(fā)程序的過程中經(jīng)常會用到常量代表一個規(guī)定的值,這樣可以做到一改全改的功能,使用方便,減少出錯的幾率。下面通過一個實(shí)例講解如何使用常量進(jìn)行程序開發(fā)。
實(shí)例位置:光盤文件\MR\ Instance\3\3.12
【例3.12】 本例實(shí)現(xiàn)了使用自定義常量計(jì)算圓的面積的功能。局部常量在所需要使用的過程中聲明,并且只能應(yīng)用在該過程中,只有當(dāng)該過程被程序調(diào)用時,該常量才存在,過程結(jié)束后該常量也將被內(nèi)存釋放掉。本示例通過使用局部常量Pi計(jì)算一個圓的面積,將其結(jié)果顯示在“立即”窗口中。程序的設(shè)計(jì)過程如下。
新建一個標(biāo)準(zhǔn)工程。
在工程中添加一個窗體,窗體的名稱使用其默認(rèn)名稱,Caption屬性設(shè)置為“計(jì)算圓的面積”,StartUpPosition屬性設(shè)置為“2-屏幕中心”。
在窗體上添加一個Label控件、一個TextBox控件和一個CommandButton控件,用于顯示、輸入圓的半徑,并計(jì)算圓的面積。
程序的運(yùn)行代碼如下。
單擊窗體中的“計(jì)算”按鈕,聲明局部常量Pi,并使用常量Pi計(jì)算圓的面積,將結(jié)果在“立即”窗口中輸出。代碼如下:
Private Sub Command1_Click()
Const Pi=3.1415926 '聲明局部常量
s=Pi*2^2 '使用常量進(jìn)行計(jì)算
Debug.Print s '將結(jié)果輸出到“立即”窗口
End Sub
程序的運(yùn)行效果如圖3.13和圖3.14所示。

圖3.13 輸入圓的半徑

圖3.14 輸出圓的面積
3.6 掌握運(yùn)算符和表達(dá)式
專題講座:光盤文件\MR\Video\3\運(yùn)算符和表達(dá)式.exe
視頻速遞:詳細(xì)講解運(yùn)算符和表達(dá)式的知識
在進(jìn)行程序設(shè)計(jì)時,經(jīng)常會進(jìn)行各種運(yùn)算,那么就會涉及一些運(yùn)算符,而表達(dá)式是運(yùn)算符和數(shù)據(jù)連接而成的式子。本章將詳細(xì)介紹運(yùn)算符和表達(dá)式在程序中的應(yīng)用。
3.6.1 學(xué)會使用運(yùn)算符
在Visual Basic 6.0中有4種運(yùn)算符,分別是算術(shù)運(yùn)算符、字符串運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符。
1.算術(shù)運(yùn)算符
算術(shù)運(yùn)算符按照優(yōu)先級從高到低,依次為指數(shù)運(yùn)算(∧),乘法(*)和除法/運(yùn)算,求余數(shù)運(yùn)算(Mod),整除運(yùn)算(\),加法(+)和減法(-)運(yùn)算,其中整除運(yùn)算只求運(yùn)算結(jié)果的整數(shù)部分,例如,在Visual Basic 6.0工程的“立即”窗口中輸出5除以2,代碼如下。
Private Sub Form_Load() Debug.Print 5 \ 2 End Sub
結(jié)果為:2
算術(shù)運(yùn)算符的基本用法相信您已經(jīng)學(xué)會了,下面介紹使用算術(shù)運(yùn)算符時需要注意的事項(xiàng)。(1)當(dāng)指數(shù)運(yùn)算(∧)與負(fù)號(?)相鄰時,負(fù)號(?)優(yōu)先。
(2)運(yùn)算符左右兩邊的操作數(shù)應(yīng)是數(shù)值型數(shù)據(jù),如果是數(shù)字字符或邏輯型數(shù)據(jù),需要將它們先轉(zhuǎn)換成數(shù)值數(shù)據(jù)后,再進(jìn)行算術(shù)運(yùn)算。
(3)在進(jìn)行算術(shù)運(yùn)算時,不要超出數(shù)據(jù)取值范圍,對于除法運(yùn)算,應(yīng)保證除數(shù)不為零。
2.關(guān)系運(yùn)算符
關(guān)系運(yùn)算符用于比較運(yùn)算符左右兩側(cè)表達(dá)式之間的大小關(guān)系,因此又稱為比較運(yùn)算符,它的運(yùn)算結(jié)果為布爾型數(shù)據(jù),即結(jié)果為True或者False,如果其中的任何一個表達(dá)式結(jié)果為NULL,則關(guān)系運(yùn)算的結(jié)果還可以是NULL。關(guān)系運(yùn)算符沒有優(yōu)先級的不同,因此在計(jì)算時,按照它們的出現(xiàn)次序,從左到右進(jìn)行計(jì)算。Visual Basic 6.0中的關(guān)系運(yùn)算符有:等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)和不等于(<>)。
另外,還要說明兩點(diǎn):
(1)對于字符型數(shù)據(jù)的比較,如果直接比較單個字符,則比較兩個字符的ASCII碼的大小,而對于兩個漢字字符,則比較兩個漢字字符的區(qū)位碼。
如果比較兩個字符串,則從關(guān)系運(yùn)算符的左邊字符串的第1個字符開始,逐一對右邊字符串的對應(yīng)位置上的字符進(jìn)行比較(即比較對應(yīng)位置上的字符的ASCII碼),其中ASCII碼值較大的字符所在的字符串大。
常見的字符值的大小比較關(guān)系如下:
“空格”<“0”<……<“9”<“A”<……<“Z”<“a”<……<“z”<“所有漢字”
(2)賦值號“=”與關(guān)系運(yùn)算符“=”的區(qū)別
在書寫上它們沒有什么區(qū)別,只是含義與作用不同。賦值號“=”專用于給變量、對象屬性、數(shù)組等賦值,賦值號左邊必須是變量名、對象屬性、數(shù)組等,不能為常量或表達(dá)式。
而關(guān)系運(yùn)算符“=”用于比較兩個表達(dá)式的值是否相等。關(guān)系運(yùn)算符“=”的左右兩邊都可以是常量、變量或表達(dá)式。用關(guān)系運(yùn)算符“=”連接形成的關(guān)系表達(dá)式不能單獨(dú)作為一條語句出現(xiàn)在程序中,它只能出現(xiàn)在其他語句或表達(dá)式中。
例如:
x=10 y=10 z=(x+10=y-100)
其中,前三個“=”都是賦值號,第3行語句中括號內(nèi)的“=”是關(guān)系運(yùn)算符。
3.連接運(yùn)算符
連接運(yùn)算符有兩個,它們是“+”和“&”。其中,“&”連接運(yùn)算符用于強(qiáng)制將兩個表達(dá)式作為字符串連接。而“+”連接運(yùn)算符則與它不同,當(dāng)兩個表達(dá)式都為字符串時,將兩個字符串連接;如果一個是字符串而另一個是數(shù)字,則進(jìn)行相加,結(jié)果為兩個數(shù)字相加的和。
下面舉例說明連接運(yùn)算符的用法。
a=2+3 'a值為5
a="2"+"3" 'a值為“23”
a="吉林省"&"長春市" 'a值為“吉林省長春市”
a="a1"+3 '出現(xiàn)“類型不匹配”的錯誤提示信息
a="a1"&3 'a值為“a13”
學(xué)習(xí)手冊
注意 變量名與“&”之間一定要加一個空格。因?yàn)椤?amp;”本身還是長整型數(shù)據(jù)類型的類型符,不加空格容易出現(xiàn)視覺和理解上的誤差。
4.邏輯運(yùn)算符
邏輯運(yùn)算符包含下列運(yùn)算符,將它們按照運(yùn)算優(yōu)先級由高到低排列為:
邏輯非(Not)、邏輯與(And)、邏輯或(Or)、邏輯異或(Xor)、邏輯等于(Eqv)及邏輯蘊(yùn)涵(Imp)。邏輯運(yùn)算得出的結(jié)果是布爾型值,也就是True或False。
3.6.2 了解表達(dá)式的構(gòu)成
前面我們簡單地介紹了表達(dá)式是運(yùn)算符和數(shù)據(jù)連接而成的式子,那么具體地說表達(dá)式就是由常量、變量、運(yùn)算符、圓括號、函數(shù)等連接形成的一個有意義的運(yùn)算式子。它包括算術(shù)表達(dá)式、字符串表達(dá)式、日期表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式。
在書寫表達(dá)式時,應(yīng)注意以下幾點(diǎn):
(1)表達(dá)式中所有的符號都必須一個一個并排寫在同一橫線上,不能寫成上標(biāo)或下標(biāo)的形式。例如,數(shù)學(xué)上的22在Visual Basic 6.0中要寫成2∧2的形式。
(2)不能省略乘號,乘號“*”必須寫。
(3)表達(dá)式中所有的括號一律使用圓括號,并且括號左右必須配對。
(4)數(shù)學(xué)表達(dá)式中表示特定含義的符號要寫成具體的數(shù)值,如π要寫成3.1415926(根據(jù)精度取小數(shù)點(diǎn)后的位數(shù))。
3.6.3 運(yùn)算符的優(yōu)先級
一個表達(dá)式中,通常包含一種或多種運(yùn)算符,這時系統(tǒng)會按預(yù)先確定的順序進(jìn)行計(jì)算,這個順序稱為運(yùn)算符的優(yōu)先級。
算術(shù)運(yùn)算符→連接運(yùn)算符→關(guān)系運(yùn)算符→邏輯運(yùn)算符
學(xué)習(xí)手冊
說明 各種運(yùn)算符的優(yōu)先級已在講解各個運(yùn)算符時介紹了,這里不再贅述。
3.7 熟悉代碼編寫規(guī)則
代碼編寫規(guī)則是養(yǎng)成良好編程習(xí)慣的基礎(chǔ)。本節(jié)主要介紹代碼編寫規(guī)則,包括對象命名規(guī)則、代碼書寫規(guī)則、處理關(guān)鍵字沖突和代碼注釋規(guī)則。
3.7.1 對象命名規(guī)則
當(dāng)為對象、屬性、方法及事件命名時,應(yīng)選擇易于被用戶理解的名字。名字含義越清晰,代碼的可用性越強(qiáng)。
這里的對象命名規(guī)則適用于:
◆ 對象;
◆ 組成對象接口的屬性、方法及事件;
◆ 屬性、方法及事件的命名參數(shù)。
具體命名規(guī)則如下。
(1)盡可能使用完整的單詞或音節(jié)。
對用戶來說,記住整個單詞比記住縮略詞更容易,例如,Window被縮略為Wind、Wn或Wnd,不如Window本身好記。下面通過兩個例子說明推薦使用的對象名稱,如表3.3所示。
表3.3 推薦使用的對象名稱(1)

如果標(biāo)識符太長而需要縮略時,則盡量用完整的首音節(jié)。例如,用AltExpEval,而不用Alternate ExpressionEvaluation或AltExpnEvln。
(2)大小寫混用。
所有標(biāo)識符都應(yīng)混用大小寫,而不是用下畫線來分割其中的單詞。下面通過兩個例子說明推薦使用的對象名稱,如表3.4所示。
表3.4 推薦使用的對象名稱(2)

(3)使用一致的術(shù)語。
使用與接口相同的單詞,不要使用諸如HWND之類的基于匈牙利命名法的標(biāo)識符命名。記住,這些代碼是要被其他用戶訪問的,因此盡量使用描述一個概念時用戶可能會采用的單詞。
(4)集合類名使用正確的復(fù)數(shù)。
對集合采用復(fù)數(shù)而不用新的名稱可以減少用戶必須記憶項(xiàng)的數(shù)目。這樣也簡化了對集合的命名。如表3.5所示列出了集合類名稱的一些例子。
表3.5 推薦使用的對象名稱(3)

例如,如果有一個名為Axis的類,則Axis對象的集合存儲在Axes類中。同樣,Vertex對象的集合存儲在Vertices類中。極少情況下當(dāng)單數(shù)和復(fù)數(shù)的拼寫一樣時,則在其后面添加一個Collection,例如SeriesCollection。
學(xué)習(xí)手冊
注意 此命名約定可能不適用于某些集合,尤其在一組對象存在于多個集合時。例如,Mail程序可能有一個Name對象存在于多個集合中:ToList、CcList等。在這種情況下,可以將這些獨(dú)立的name集合命名為ToNames和CcNames。
(5)常數(shù)使用前綴。
選擇三四個小寫字母組成標(biāo)識部件的前綴,把它用在部件類型庫中部件提供的常數(shù)名上,以及定義那些常數(shù)的Enums名上。
例如,提供貸款評估的代碼可以使用levs作為前綴。下面貸款的枚舉類型Enum使用了該前綴。(此外,這些常數(shù)包含大寫字母LT,以標(biāo)識它們所屬的枚舉。)
Public Enum LoanType levsLT Mortgage=1 levsLT Commercial levsLT Consumer End Enum
(6)“動詞/對象”和“對象/動詞”。
如果創(chuàng)建的方法名是一個動詞及其作用的對象名的組合,則次序必須保持一致。或者在所有情況下都將動詞放在對象前面,如InsertWidget和InsertSprocket;或者總是將對象放在前面,如WidgetInsert和SprocketInsert。
兩種方法各有所長。“動詞/對象”次序創(chuàng)建的名稱更像日常說法,因而能更好地表示此方法的意圖。而“對象/動詞”的次序則便于將影響某一特定對象的所有方法集合到一起。
3.7.2 代碼書寫規(guī)則
代碼書寫規(guī)則如下:
(1)可將單行語句分成多行。
可以在“代碼”窗口中用續(xù)行符“ _ ”(一個空格后面跟一個下畫線)將長語句分成多行。由于使用續(xù)行符,無論在計(jì)算機(jī)上還是打印出來的代碼都變得易讀。例如,聲明一個API函數(shù),代碼如下。
'聲明API函數(shù)用于異步打開一個文檔 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (By Val hwnd As Long,_ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ By Val nShowCmd As Long)As Long
學(xué)習(xí)手冊
注意 在同一行內(nèi),續(xù)行符后面不能加注釋。
(2)可將多個語句合并寫到同一行。
通常,一行之中有一個Visual Basic語句,而且不用語句終結(jié)符。但是也可以將兩個或多個語句放在同一行,只是要用冒號“:”將它們分開。例如,給數(shù)組連續(xù)賦值,其代碼如下。
a(0) = 11: a(1) = 12: a(3) = 13: a(4) = 14: a(5) = 15: a(6) = 16
(3)可在代碼中添加注釋。
以Rem或“'”(單引號)開頭,Visual Basic就會忽略該符號后面的內(nèi)容。這些內(nèi)容就是代碼段中的注釋,既方便開發(fā)者也為以后可能檢查源代碼的其他程序員提供方便。例如為下面的代碼添加注釋:
Dim a As String '定義一個字符型變量 Dim a As String : Rem定義一個字符型變量
學(xué)習(xí)手冊
注意 如果在語句行后使用Rem關(guān)鍵字,則必須在語句后使用冒號“:”與Rem關(guān)鍵字隔開,而且Rem關(guān)鍵字與注釋文字間要有一個空格。
(4)在輸入代碼時不區(qū)分大小寫。
(5)一行最多允許輸入255個字符。
3.7.3 處理關(guān)鍵字沖突
在代碼的編寫中為避免Visual Basic中元素(Sub和Function過程、變量、常數(shù)等)的名字與關(guān)鍵字發(fā)生沖突,它們不能與受到限制的關(guān)鍵字同名。
受到限制的關(guān)鍵字是在Visual Basic中使用的詞,是編程語言的一部分。其中包括預(yù)定義語句(比如If和Loop)、函數(shù)(比如Len和Abs)和操作符(比如Or和Mod)。
窗體或控件可以與受到限制的關(guān)鍵字同名。例如,可以將某個控件命名為If。但在代碼中不能用通常的方法引用該控件,因?yàn)樵赩isual Basic中If意味著關(guān)鍵字。例如,下面這樣的代碼就會出錯。
If.Caption=“同意” '出錯
為了引用那些與受到限制的關(guān)鍵字同名的窗體或控件,就必須限定它們,或者將其用方括號“[ ]”括起來。例如,下面的代碼就不會出錯。
MyForm.If.Caption=“同意” '用窗體名將其限定 [If].Caption=“同意” '方括號起了作用
3.7.4 了解代碼注釋規(guī)則
注釋是一種非執(zhí)行語句,它不僅僅是對程序的解釋說明,同時還對程序的調(diào)用起著非常重要的作用。如利用注釋來屏蔽一條語句,當(dāng)程序再次運(yùn)行時,可以發(fā)現(xiàn)問題或錯誤。這樣大大提高了編程速度,減少了不必要的代碼重復(fù)。代碼注釋規(guī)則如下:
(1)程序功能模塊部分要有代碼注釋,簡潔明了地闡述該模塊的實(shí)現(xiàn)功能。
(2)程序或模塊開頭部分要有以下注釋:模塊名、創(chuàng)建人、日期、功能描述等。
(3)在給代碼添加注釋時,盡量使用中文。
(4)用注釋來提示錯誤信息以及出錯原因。
下面介紹幾種注釋的方法。
1.利用代碼或語句添加注釋
在Visual Basic中使用“'”符號或“Rem”關(guān)鍵字,可以為代碼添加注釋信息。“'”符號可以忽略掉后面的一行內(nèi)容,這些內(nèi)容是代碼段中的注釋。這些注釋主要是為了以后查看代碼時,幫助用戶快速理解該代碼的內(nèi)容。注釋可以和語句在同一行出現(xiàn),并寫在語句的后面,也可以獨(dú)自占據(jù)一整行。
(1)注釋占據(jù)一行,在需要解釋的代碼前。
'為窗體標(biāo)題欄設(shè)置文字 Me.caption="明日科技" Rem在文本框中放歡迎詞 Text1.Text = "歡迎您使用本軟件!!!"
(2)注釋和語句在同一行并寫在語句的后面。
Me.caption="明日科技" '為窗體標(biāo)題欄設(shè)置文字 Text1.Text="歡迎您使用本軟件!!!": Rem在文本框中放歡迎詞
(3)注釋占據(jù)多行,通常用來說明函數(shù)、過程等的功能信息。通常在說明前后使用注釋和“=”、“*”符號強(qiáng)調(diào)。例如下面的代碼:
'========================================================== '名稱:CalculateSquareRoot '功能:求平方根 '日期:2008-03-02 '單位:mingrisoft '========================================================== Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg<0 Then ' 評估參數(shù) Exit Function '退出調(diào)用過程 Else CalculateSquareRoot =Sqr(NumberArg) '返回平方根 End If End Function
2.利用工具欄按鈕為代碼添加注釋
為了方便對大段程序進(jìn)行注釋,可以通過選中兩行或多行代碼,并在“編輯”工具欄上單擊“設(shè)置注釋塊”按鈕或“解除注釋塊”按鈕
來對大段代碼塊添加或解除注釋符號“'”。設(shè)置或取消連續(xù)多行的代碼注釋塊的步驟如下。
在工具欄上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“編輯”命令,將“編輯”工具欄添加到窗體工具欄中。
選中要設(shè)置注釋的代碼,然后單擊“編輯”工具欄中的“設(shè)置注釋塊”按鈕,如圖3.15所示。也可以將光標(biāo)放置在需要注釋的代碼所在行,單擊“設(shè)置注釋塊”按鈕即可。

圖3.15 編輯工具欄
【例3.13】 下面使用注釋塊注釋代碼。選中需要注釋的代碼,單擊“設(shè)置注釋塊”按鈕,即可將選中的代碼全部注釋,注釋后的效果如下。
'Private Sub Command1_Click() ' Command2.Enabled=True ' Command1.Enabled=False 'End Sub
“解除注釋塊”按鈕與“設(shè)置注釋塊”按鈕功能正好相反,主要用于清除選中代碼前的“'”符號,從而解除該代碼塊的注釋。
學(xué)習(xí)手冊
注意 在使用注釋符號“'”時,不能將注釋符號“'”放在“_”續(xù)行符之后。
3.8 實(shí)戰(zhàn)練習(xí)
3.8.1 用“+”運(yùn)算符進(jìn)行加法和串聯(lián)字符串
難度系數(shù):★★★
題目描述
在本章介紹了大量常用的運(yùn)算符,其中,“+”運(yùn)算符有兩種功能,一種是用于數(shù)值型數(shù)據(jù)的相加;另一種是用于連接字符串,本練習(xí)嘗試開發(fā)一個程序,要求使用“+”運(yùn)算符進(jìn)行加法運(yùn)算和串聯(lián)字符串,效果如圖3.16所示。

圖3.16 加法運(yùn)算和串聯(lián)字符串
技術(shù)指導(dǎo)
對于數(shù)值的相加很簡單,就是在“+”運(yùn)算符的左右兩側(cè)放置被加數(shù)和加數(shù);對于連接兩個字符串也并不難,也是在“+”運(yùn)算符的左右兩側(cè)放置兩個要連接的字符串,示例代碼參考如下:
Text1.Text=45+45 '兩個整數(shù)相加 Text2.Text="45"+"45" '兩個字符串相連
緊急救援
如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.1
3.8.2 使用公用變量記錄當(dāng)前登錄用戶
難度系數(shù):★★★★
題目描述
在本章介紹了變量和變量的作用域,每個變量都有它的作用范圍,在一個過程內(nèi)部聲明的變量,只在該過程內(nèi)部有效,一個模塊的通用聲明部分聲明的變量,只在該模塊內(nèi)的所有過程有效,而對于使用Public語句聲明的變量,不僅對于同一模塊內(nèi)的所有過程有效,甚至對于整個應(yīng)用程序的所有過程也都是有效的。
本練習(xí)嘗試開發(fā)一個程序,要求使用公用變量記錄當(dāng)前登錄用戶,然后在加載下一個窗體的時候?qū)⒌卿浻脩舻拿Q顯示出來。本例要求在登錄窗體中輸入用戶名,在主窗體中顯示用戶名。程序的運(yùn)行效果如圖3.17和圖3.18所示。

圖3.17 輸入正確的用戶名與密碼

圖3.18 顯示Form2窗體
技術(shù)指導(dǎo)
該程序首先要在登錄窗體的代碼編輯區(qū)域聲明一個公有變量(全局變量),然后將文本框中輸入的用戶名信息賦給該公有變量,最后在加載主窗體的時候調(diào)用該公有變量即可。
公有變量的聲明和示例代碼參考如下:
Public c As String Private Sub Command1_Click() Dim a As String, b As String a = "mr" b = "mrsoft" If Text2.Text = b And Text1.Text = a Then c = Text1.Text Form2.Show End If End Sub
緊急救援
如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.2
3.8.3 正確使用“&”和“+”
難度系數(shù):★★★★
題目描述
字符串運(yùn)算符有兩個:“&”和“+”。“&”用來強(qiáng)制兩個表達(dá)式做字符串連接。“+”用來求兩個數(shù)之和。如果無法確定是做加法還是做字符串連接,為了避免混淆,應(yīng)使用“&”運(yùn)算符進(jìn)行字符串連接。
技術(shù)指導(dǎo)
使用運(yùn)算符“&”時應(yīng)注意,變量與運(yùn)算符“&”間應(yīng)加一個空格,否則Visual Basic先把“&”作為類型定義處理,造成“缺少語句結(jié)束”的錯誤。
Dim Mystr Mystr="mingri"&"soft" '返回“mingrisoft” Mystr="您的分?jǐn)?shù)為"&100&"分" '返回“您的分?jǐn)?shù)為100分” Mystr=1000&1 ' 返回“10000001”
使用“+”運(yùn)算可以實(shí)現(xiàn)字符串的串界操作。但最好還是使用“&”運(yùn)算符。因?yàn)槿绻?”運(yùn)算符兩邊的表達(dá)式中數(shù)據(jù)類型不一致時會報(bào)錯。如果都是字符串做“相加”,則返回串接起來的字符串。
Dim Mystr, a, b As String a =1000 b ="a1001" Mystr="mingri"&"soft" '返回“mingrisoft” Mystr="mingri"+"soft" '返回“mingrisoft” Mystr="您的分?jǐn)?shù)為"+100+"分" '出錯,不允許數(shù)字與字符串使用“+”連接 Mystr=a+100+b '出錯,不允許數(shù)字與字符串使用“+”連接 Mystr=a+100 ' 返回1100 Mystr= 分?jǐn)?shù)100+100 ' 返回100 Mystr=1000&1 ' 返回“10000001” Mystr="1000"+"0001" ' 返回“10000001” Mystr=1000+1 ' 返回“1001”
緊急救援
如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.3
3.9 本章小結(jié)
本章主要介紹了關(guān)鍵字、標(biāo)識符、數(shù)據(jù)類型、變量、常量、運(yùn)算符、表達(dá)式和代碼編寫規(guī)則。讀者應(yīng)重點(diǎn)掌握變量,它是程序設(shè)計(jì)的關(guān)鍵內(nèi)容,另外,良好的編程習(xí)慣也是必不可少的。
- 演進(jìn)式架構(gòu)(原書第2版)
- Advanced Splunk
- Learning LibGDX Game Development(Second Edition)
- Getting Started with Citrix XenApp? 7.6
- Cassandra Design Patterns(Second Edition)
- 征服RIA
- Mastering KnockoutJS
- Python機(jī)器學(xué)習(xí)編程與實(shí)戰(zhàn)
- Python貝葉斯分析(第2版)
- SQL Server 2016數(shù)據(jù)庫應(yīng)用與開發(fā)習(xí)題解答與上機(jī)指導(dǎo)
- Python機(jī)器學(xué)習(xí)基礎(chǔ)教程
- PhoneGap:Beginner's Guide(Third Edition)
- HTML5從入門到精通 (第2版)
- CoffeeScript Application Development Cookbook
- C語言程序設(shè)計(jì)簡明教程:Qt實(shí)戰(zhàn)