官术网_书友最值得收藏!

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中要寫成22的形式。

(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í)慣也是必不可少的。

主站蜘蛛池模板: 儋州市| 多伦县| 钟祥市| 福州市| 华宁县| 榆社县| 额尔古纳市| 墨玉县| 永城市| 金沙县| 滦南县| 陵川县| 汉沽区| 策勒县| 牟定县| 保山市| 东乡县| 天峨县| 金堂县| 鄱阳县| 淮安市| 威宁| 革吉县| 荥经县| 固始县| 迁安市| 大新县| 忻州市| 布拖县| 富锦市| 谢通门县| 柘荣县| 昌宁县| 石阡县| 梨树县| 惠水县| 多伦县| 渑池县| 南开区| 定州市| 德兴市|