程序設(shè)計 - 微計算機(jī)技術(shù)_第1頁
程序設(shè)計 - 微計算機(jī)技術(shù)_第2頁
程序設(shè)計 - 微計算機(jī)技術(shù)_第3頁
程序設(shè)計 - 微計算機(jī)技術(shù)_第4頁
程序設(shè)計 - 微計算機(jī)技術(shù)_第5頁
已閱讀5頁,還剩93頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VisualBasic

程序設(shè)計

第4章

VB高級語言技巧

4.1多功能計算器任務(wù)

4.1.1任務(wù)描述

在第三章簡單計算器的基礎(chǔ),增加以下功能:

1.將計算結(jié)果轉(zhuǎn)換為十六進(jìn)制。

2.就數(shù)字鍵設(shè)置為命令按鈕組,使“沁“9”數(shù)

字按鍵的Index屬性分別為0、1、2、3、4、5、

6、7、8、9。

3.禁止鍵盤在文本框中輸入數(shù)據(jù)。I.

4.使計算器總是懸浮在其它窗體上。

界面如下頁所示。

2

.1□!x|

幫助田

4.1.2界面設(shè)計

i.添加“十六進(jìn)制”和“數(shù)字大寫〈、兩個文本框,分別

命名為txtHex和txtBig。

2.刪除原來的“0”?“9”數(shù)字按鈕控件,并重新放置一

個命令按鈕控件,嚼其Caption屬性設(shè)置為“0”。

3.復(fù)制該數(shù)字命令按鈕。

4.在數(shù)字區(qū)框架控件上,粘貼該數(shù)字命令按鈕,系統(tǒng)詢

問是否創(chuàng)建一個控件數(shù)組,回答“是”。將它的

Caption屬性改為“1”,Index屬性值設(shè)置為1。

按照上述方法粘貼數(shù)字按鈕控件“2”?“9”。

5、此時得到一個按鈕控件數(shù)組“0”?“9”,它們的

Index1香依次為“0”?“9”。

6、將TxtBig的ToolTipText屬性設(shè)置為“大寫數(shù)字”。

4

4.1.3代碼設(shè)計

1.用API函數(shù)實現(xiàn)“總在前面”效果

(1)程序代碼

在代碼編輯器的“通用”部分聲明SetWindowPos函數(shù)及相

關(guān)常數(shù):

PrivateDeclareFunctionSetWindowPosLibMuser32n_

(ByVaihwndAsLong,ByVaihWndlnsertAfterAsLong,_

ByVaixAsLong,ByVaiyAsLong,ByVaiexAsLong,_

ByVaicyAsLong,ByVaiwFlagsAsLong)AsLong

PrivateConstHWNDTOPMOST=-1

PrivateConstSWP_NOMOVE=&H2

PrivateConstSWP二NOSIZE=&H1

然后在Form的Load事件中加入以下代碼:

SetWindowPoshwnd,HWNDTOPMOST,0,0,0,0,

SWPNOMOVEOrSWPNOSIZE

5

(1)API函數(shù)調(diào)用的一般方法

要在VB中使用API函數(shù),首先要在工程的標(biāo)準(zhǔn)模

塊(Module)或窗體的代碼的“通用”部分中

聲明它,然后可以按照調(diào)用VB其它單數(shù)一樣來

使用它。獲得函數(shù)聲明的一般方法:

在安裝VB系統(tǒng)后,通常會在VB程序組中看到

“API文本瀏覽器”的應(yīng)用程序。

步驟如下:

沿[開始]-[程序]-[MicrosoftVisualStudio

6.0]-[MicrofoftViaualStodio6.0

Tools]-[APITextWiewer]找到API瀏覽器。

6

aD:\VliN示,QIAR4.1?便兇

文件舊周隔國直看的收粼舲XMW幫助獨DI

j后退▼二王JT0搜索3文件夾爹1空曙X的「睦H

地址◎|口CHAR4J32轉(zhuǎn)到上網(wǎng)助手13-令梭I已攔截:549

FormlfrmAboutMSSCCPRJ工程1

CHAR4.1

選定項目可以查看其說明.

,WindowsUpdate

打開Office文檔

新建。ffice文檔

WinRAR

附件

程序⑻

MicrosoftFrontpage

文檔(Q)MicrosoftWord

MicrosoftOffice中文版

設(shè)置⑸

(L)eMicrosoftVisualStudio6.0?

JAMicrosoftVisualSourceSafe

a?Microsoft5QLServer

s搜索?

0■

0電成籟管理系統(tǒng)窗MicrosoftVisualBasic6.0

0幫助出):忘

MFlashGet

S

M運行?…

O

關(guān)機(jī)

(u).1電莪的電腦

⑹i野冷聞示例\CHAR4JCH震杳空令14:53

第1步:啟動“API文本瀏覽器”

*API瀏甕器.!□1x|

文件(E)編輯(日視圖在)幫助(由

API類型化):

三]

鍵入您要查找的內(nèi)容的開頭幾個字母(I):

可用項①):

8

*API瀏器器-laixi

文件(E)編輯⑥視圖⑺幫助回

API類型9:

I聲明—―一IMM

鍵入您要查找的內(nèi)容的開頭幾個字母(1):

檎?

復(fù)制?

二I

9

第2步:選擇“文件-加載文本文件”菜單項

加載WinAPI.txt文件。

選擇一個文本API文件工JR

查找范圍a):|Vlinani1包凈回▼

APILOAD

|)MAPI32

胤WIN32API

文件名但):JAPILOAD三]打開&)

文件類型(X):|文本(*.TXT)3取消

第3步:選擇API類型:聲明

.!□1x|

文件⑹編輯(日視圖出幫助(由

API類型國):

[筆數(shù)q

網(wǎng)■■■■■■■■■■■■■■■■

可用項建)

SetWindowPos添加Q)

SetWindowRgn

SetWindowsHook史明范圍

SettfindowsMookEx

SetWindowText傘公有也)

SetWindowWordr私有⑦

SetWinNetaFileBits

SetWorldTransform

選定項⑤):

復(fù)制?

二1

12

第4步:選擇立刻用項SetWindowPos,將聲明范

圍設(shè)置為“私有”。

回兇

文件⑹編輯⑹視圖⑦幫助(由

API類型化):

鍵入您要查找的內(nèi)容的開頭幾個字母(I)

可用項建):

添加(A)

SetWindowRgn

SetWindowsHook聲明范圍

SetWindowsHookEx

SetWindowTextr公有?

SetWindowWord6都百①

SetWinHetaFileBits

SetWorldlransform

選定項⑤)

13

按添加按鈕。

LAM必隰:■如乩1盟小1叫』兒國溫也ILIkW,ia|x|

文件(E)編輯⑹視圖(均幫助(由

API類型g:

[AB§3

鍵入您要查找的內(nèi)容的開頭幾個字母(X):

14

第5步:就選定項下的VB代碼復(fù)制

I*API閱覽器-C:\ProgramFile.'N

文件(E)編輯(日視圖(y)幫助(由

API類型d):

鍵入您要查找的內(nèi)容的開頭幾個字母(I):

可用項建):

SetWindowPos添加(A)

SetnmdowKgn

SetWindowsHook聲明范圍

SettfindowsHookEx

SetWindowTextr公有?

SetWindowWord仃私有甲

SetWinfdetaFileBits

SetWorldTransform

選定項9:

PrivateDeclareFunctionSetWindowPosLibbuser32"|刪除??

M.ias"SetWindowPos"(ByVaihwndAsLong,ByVai|

htfn?dlnsertAfterAsLong,ByVaixAsLong,ByVaiy|

潘除也)

ksLon氐ByVaiexAsLong,ByYalcyAsLon氐

■vFlvg;&三LBILM]AE

復(fù)制?

二J

15

第5步:將復(fù)制的VB代碼粘貼到窗體代碼編輯器

中的“通用-聲明”部分。

Hi工程1-Forml(Code),口x]

G1用)Changele

PrivateDeclareFunctionSetWindowPosLib“user32"

(ByVaihwndAsLon氐ByVaihWndlnsertAfterAsLong,

ByVaixAsLong^ByVaiyAsLong,ByVaiexAsLong,

ByVaicyAsLong^ByVaiwFlagsAsLong)AsLong

PrivateConstHWNII^TOPMOST=-1

PrivateConstSWP_而MOVE=虬2

PrivateConstSfffNDSIZE=&H1

ZJSJZJ

16

習(xí)題P115一、單項選擇題

2.能夠?qū)崿F(xiàn)“窗體總在最前端”界面效果

的API函數(shù)是()。

A.SetWindowPos

B.SetWindowAPI

C.SetWindowShape

D.DeclareAPI

答案:A

17

2.數(shù)字區(qū)命令按鈕的Click事件

PrivateSubCommandl_Click(IndexAsInteger)

,使用Str函數(shù)將Index轉(zhuǎn)換為字符串,然后使用

Trim函數(shù)去掉前后空格

IftxtLabel.Text=Then

txtFirst.Text=txtFirst.Text+Trim(Str(Index))

Else

txtSecond.Text=txtSecond.Text+

Trim(Str(Index))

EndIf

EndSub

18

3.禁止用戶在文本框中輸入數(shù)字

PrivateSubtxtResult_KeyDown(KeyCodeAs

Integer,ShiftAsInteger)

KeyCode=0,禁止所有的鍵盤輸大、除

Backspace退格鍵夕卜)

EndSub

PrivateSubtxtResult_KeyPress(KeyAsciiAs

Integer)

KeyAscii=0'禁止Backspace退格鍵

EndSub

19

習(xí)題P116二、填空題

1.通??蓪⑽谋究驋奂摹傩栽O(shè)置

為True,以禁止鍵盤輸入

答案:Locked

20

4.修改“計算結(jié)果”按鈕的Click事件代碼

,“計算結(jié)果”命令按鈕的Click事件

PrivateSubCommandl7_Click()

,定義一個Double類型的菱量

DimMyResultAsDouble

1以txtLable.Text的值為多重分支條件

SelectCasetxtLabel.Text

Case當(dāng)txtLabel.Text的值為“+”時

MyResult=Val(txtFirst.Text)+Val(txtSecond.Text)

Case,當(dāng)txtLabeLText的值為時

MyResult=Val(txtFirst.Text)-Val(txtSecond.Text)

Case”X”,當(dāng)txtLabel.Text的值為“X”時

MyResult=Val(txtFirst.Text)*Val(txtSecond.Text)

Casey當(dāng)txtLabeLText的超為“+”時

MyResult=Val(txtFirst.Text)/Val(txtSecond.Text)

EndSelect

21

4.修改“計算結(jié)果”按鈕的Click事件代碼

txtResult.Text=MyResult'顯示計算結(jié)果

,將計算結(jié)果轉(zhuǎn)換為十六進(jìn)制數(shù)字I

txtHex.Text=Hex(MyResult)

,將計算結(jié)果轉(zhuǎn)換為大寫數(shù)字,(采用函數(shù)功能完成)

txtBig.Text=ChangeMe(MyResult)

EndSub

22

5.編寫ChangeMe函數(shù)代碼

PrivateFunctionChangeMe(FirstAsDouble)AsString

,聲明變量

DimstrFirstAsString

DimstrBig(9)AsString,聲明一個字符串?dāng)?shù)組

DimstrTempAsString

Dimi,jAsInteger

,設(shè)置數(shù)組變量的值\

strBig(O)="零七strBig(l)="壹]strBig(2)="貳1_

strBig(3)="叁[strBig(4)="肆":strBig(5)="伍":—

strBig(6)="陸":strBig(7)="柒":strBig(8)="捌”:

strBig(9)=''玖''

23

5.編寫ChangeMe函數(shù)代碼

,將Double型的參數(shù)First轉(zhuǎn)換為字符串型]

strFirst=Trim(Str(First))

strTemp=

,開始數(shù)字轉(zhuǎn)換

Fori=1ToLen(strFirst)

,取出第i位的字符數(shù)字,并將它轉(zhuǎn)換為數(shù)值

j=Val(Mid(strFirst,i,1))

,通過數(shù)組完成大寫轉(zhuǎn)換

strTemp=strTemp+strBig(j)

Nexti

,將轉(zhuǎn)換結(jié)果返回I1

ChangeMe=strTemp

EndFunction(演示)

24

習(xí)題P116三、問答題

5.請簡述多功能計算器與第3章計算器在功能上的

區(qū)別。

答:區(qū)別有以下幾點:

1)能將計算結(jié)果轉(zhuǎn)換為十六進(jìn)制。

2)將數(shù)字鍵設(shè)置為命令按鈕組,使“0”?“9”數(shù)

字按鍵的Index屬性分別為0、1、2、3、4、5、6、

7、8、9。用按鍵的Index來識別輸入的數(shù)字。

3)禁止鍵盤在文本框中輸入數(shù)據(jù)。

4)使計算器總是懸浮在其它窗體上。

25

4.2數(shù)組的使用

4.2.1數(shù)組

1.數(shù)組的概念

VB把一組具有同一名字、不同下標(biāo)的變量稱為數(shù)組,

它實際上是一組具有相同類型的變量的集合。根據(jù)下

標(biāo)的個數(shù)可分為一維數(shù)組、二維數(shù)組、多維數(shù)組。

例如:

,設(shè)置數(shù)組變量的值

strBig(O)="零":strBig(l)="壹":strBig(2)="貳":_

strBig(3)="叁":strBig(4)="肆":strBig(5)="伍":[

strBig(6)="陸[strBig(7)="柒":strBig(8)="捌1

strBig(9)="玖”

26

2.聲明靜態(tài)數(shù)組

數(shù)組分為靜態(tài)數(shù)組和動態(tài)數(shù)組。定義靜態(tài)數(shù)組的方

法與變量的聲明方法基本相同。有兩種聲明方法

(1)方法1

Dim數(shù)組名(上界)As數(shù)據(jù)類型

這種定義方法,默認(rèn)情況下數(shù)組的下界從0開始,

因此數(shù)組元素的個數(shù)等于上界+1。數(shù)組的全部元

素都初始化為0(數(shù)值型)或空字符串(字符串

型)例如定義一維數(shù)組:

DimA(5)AsInteger

數(shù)組A包括6個數(shù)組元素:A(0)、A(1)

A(5)o■

27

(2)方法2

Dim數(shù)組名(下界To上界)

采用這種方法可以根據(jù)需要設(shè)置下標(biāo)的起始和結(jié)束值,

即上界和下界。例如

DimA(1To5)AsInteger

該數(shù)組包括5個元素:A(1)、A(2)、…、\A(5)o

也可定義二維數(shù)組。例如:

DimA(1To5,1To5)AsInteger

該數(shù)組包括A(1,1),A(1,2),…、A(1,5),…,

A(5,1),A(5,2),…,A(5,5)

又如:DimA(5,5)AsInteger

該數(shù)組包括36個元素:A

(0,0),A(0,l),A(0,2),…,A(0,5),…,

A(5,0),A(5,l),A(5,2),…,A(5,5)

28

3.動態(tài)數(shù)組

如果事先不能確定數(shù)組元翥的個數(shù),可以采用動

態(tài)數(shù)組聲明技術(shù),主要方法是:

(1)首先聲明一個靜態(tài)數(shù)組,只定義其數(shù)組名,

不指定數(shù)組的大小。例如

DimAAsInteger

(2)在程序執(zhí)行過程中,使用ReDim語句修改

數(shù)組的大小或數(shù)組的上界,例如:\

ReDimA(20)AsInteger

ReDimA(1To20)AsInteger

29

習(xí)題P115一、單項選擇題

1.DimA(IT06,1TO5)定義的數(shù)組包

含的元素個數(shù)是()

A.30

B.25

C.42

D.動態(tài)變化"

答案:A

30

習(xí)題P116二、填空題

4.DimA(IT06)定義的數(shù)組包含

個元素。、

答案:6

31

習(xí)題P116三、問答題

3.什么是數(shù)組,如何聲明,使用數(shù)組有什么好處?

答:VB把一組具有同一名字、不同下標(biāo)的變量稱為數(shù)組,它

實際上是一組具有相同類型的變量的集合。

數(shù)組分為靜態(tài)數(shù)組和動態(tài)數(shù)組。定義靜態(tài)數(shù)組的方法與

變量的聲明方法基本相同。有兩種聲明方法:

方法1:Dim數(shù)組名(上界)As數(shù)據(jù)類型\

方法2:Dim數(shù)組名(下界To上界)As數(shù)據(jù)類型。

使用數(shù)組可以使程序代碼更清晰、簡潔。,可以方便

靈活地組織數(shù)據(jù)。

32

422控件數(shù)組

控件數(shù)組是一種特殊的數(shù)組,與普

通數(shù)組的主要區(qū)別是,它的數(shù)據(jù)類型為

控件類型。每個數(shù)組元素都是'個控件

對象,這些控件對象共用一個相同的名

字,即所有的元素的Name屬性值相同,

各控件元素用Index屬性表示數(shù)組下標(biāo)。

33

數(shù)字區(qū)命令按鈕的Click事件

PrivateSubCommandl_Click(IndexAsInteger)

,使用Str函數(shù)將Index轉(zhuǎn)換為字符串,然后使用

Trim函數(shù)去掉前后空格

IftxtLabel.Text=Then

txtFirst.Text=txtFirst.Text+Trim(Str(Index))

Else

txtSecond.Text=txtSecond.Text+

Trim(Str(Index))

EndIf

EndSub

34

數(shù)字區(qū)命令按鈕的Click事件也可編寫如下:

PrivateSubCommandl_Click(IndexAsInteger)

SelectCaseIndex

Case0

IftxtLabel.Text=Then

txtFirst.Text=txtFirst.Text+"0”

Else

txtSecond.Text=txtSecond.Text+“0”

EndIf

Case1

IftxtLabel.Text=Then

txtFirst.Text=txtFirst.Text+"1”

Else

txtSecond.Text=txtSecond.Text+“1”

EndIf

35

Case9

IftxtLabel.Text=nnThen

txtFirst.Text=txtFirst.Text+“9”

Else

txtSecond.Text=txtSecond.Text+“9”

EndIf

EndSelect

EndSub

利用Select或If選擇結(jié)構(gòu),通過對Index屬性值

的判斷,響應(yīng)不同按鈕元素的單擊事件。

36

習(xí)題P116一、單項選擇題

3.如果創(chuàng)建了命令按鈕窺組茬件,那么

Click事件的參數(shù)是()。

A.Index\

B.Caption

c.Tag

D.沒有參數(shù)

答案:A

37

習(xí)題P116二、填空題

2.在程序運行過程中可以使用語句

修改數(shù)組的上下界。

答案:ReDim

38

4.2.3枚舉及自定義數(shù)據(jù)類型

1.枚舉

當(dāng)一個變量只可能見幾個值時,可將其定義為枚舉型,

比如一個變量取廠7之間的整數(shù)來表示星期幾,則可以

把這個變量定義為枚舉型。枚舉類型只能有一個元素。

要定義枚舉型變量,須先用關(guān)鍵字Emum定義一個枚舉類

型。例如:

PublicEnumenmDay

星期日=1

星期一=2

星期五=6

星期一=7

EndEmun

39

4.2.3枚舉及自定義數(shù)據(jù)類型

該語句定義了一個名為enmDay的枚舉變量。注意emnDay

本身并不是一個變量,它只是用戶自己定義的新的數(shù)

據(jù)類型。一經(jīng)定義,就可以像VB提供的標(biāo)準(zhǔn)數(shù)據(jù)類型

(如String、Integer)一樣使用。例如:

DimMydayAsemnDay,聲明一個變量Myday,其數(shù)

據(jù)類型為enmDay

Myday=星期日'為變量賦值,即Myday=1

使用枚舉型時應(yīng)注意幾點:

(1)枚舉類型中的元素只能表示長整型常數(shù)。▼

(2)枚舉類型應(yīng)在模塊級別中定義。1

(3)當(dāng)定義時沒有給枚舉成員賦值時,系統(tǒng)自動為第一

個成員賦值0,以后的成員值依次加1。

40

2.自定義類型

自定義類型與枚舉類型一樣,也是一種構(gòu)造型數(shù)據(jù),稱為記錄類型。

使用方法如下:

(1)定義

PublicTypeStudent

學(xué)號AsString*10

姓名AsString*10

年齡AsInteger

籍貫AsString

EndType

該語句定義了一個名為Student的數(shù)據(jù)類型。

⑵聲明變量Q

DimxAsStudent

(3)使用1

x.學(xué)號="2004001”

x.姓名=“張紅”

41

枚舉和自定義類型是一種有效的數(shù)

據(jù)組織方式。盡管不使用它們也照樣可

以開發(fā)出功能強(qiáng)大的應(yīng)用程序,但有效

地應(yīng)用這兩種方式,可以使程序代碼更

清晰、簡潔。如果要使用這兩種方式,

最好能在模塊中用Public定義,以便整個

應(yīng)用程序使用。

42

4.3過程和函數(shù)的定義和調(diào)用

VB窗體和控件的每弋個事件都是一

個過程,稱為事件過程,它們總是與特

定的控件對象相關(guān)聯(lián))所以被認(rèn)為是私

有(Private)過程。此外,VB還提供了

一些內(nèi)置的由系統(tǒng)預(yù)先編好的函數(shù),比

如Trim,Str和Vai函數(shù)等。

在VB中,將Sub...EndSub定義的子

程序稱為Sub過程(子過程),而將

Function...EndFuction定義的函數(shù)稱

為Function過程(函數(shù)過程)。

43

4.3.1為什么要編寫自定義過程

函數(shù)過程是一種代碼分塊技術(shù),采用這種技術(shù)將

應(yīng)用程序劃分為多個程序模塊,其好處是:

1.過程規(guī)模小,容易調(diào)用和維護(hù)。

2.過程可以被反復(fù)調(diào)用,避免了重復(fù)編碼,加強(qiáng)

了可重用性。

3.過程是由處理某一特定功能的代碼組成,是一

個相對獨立的實體,將應(yīng)用程序劃分為這樣一

個實體,會使程序結(jié)構(gòu)簡潔,便于閱讀維護(hù)。

44

習(xí)題P116三、問答題

1.為什么要編寫自定義過程?

因為自地那以過程有以下好處:

1.過程規(guī)模小,容易調(diào)用和維護(hù)。

2.過程可以被反復(fù)調(diào)用,避免了重復(fù)編相,加強(qiáng)

了可重用性。\

3.過程是由處理某一特定功能的代碼組成,是一

個相對獨立的實體,將應(yīng)用程序劃分為這樣

一個實體,會使程序結(jié)構(gòu)簡潔,便于閱讀維

護(hù)。

45

4.3.2Sub過程

1.定義

一般應(yīng)在窗體代碼編輯器的“通用”部分定義私

有的Sub過程,一經(jīng)定義則可以在窗體的所有

地方調(diào)用它。

46

如果希望定義整個應(yīng)用程序均可以使用的公有過

程,則最好在標(biāo)準(zhǔn)模塊(Module)進(jìn)行。

W?工程1-Modulel(Code)=jnl2d

61用)Plus三]

PublicSubPlus(txtAsTextBox,

txt.Text=x+y3

EndSub

nI

47

2.調(diào)用

調(diào)用過程的方法非常簡單,如圖所示。

E工程1-Forml(Code)Jnlx|

___________________________________________________________________________________-——七-//*

3[cu^二I

PrivateSubCommandl_C11ck()

PlusTextl,1,2―

PlusText2,5,3

EndSub|

Jjl

習(xí)題P116一、單項選擇題

4.如果要在窗體代碼編輯器的“通用”部

分定義私有Sub過程,則正確的語句是

(

A.PublicSub

B.PublicFnction

C.PrivateSub

D.PrivateFunction

答案:cI1

49

4.3.3Fucttion函數(shù)

i.定義

Function過程以一個返回值表示執(zhí)行結(jié)果,也有公有

的和私有的兩種作用范圍。例如,在窗體中定義一個返回

整型數(shù)據(jù)的私有Function函數(shù):

PrivateFunctionPlusXY(xAsInteger,yAsInteger)AsInteger

PlusXY=x+y

EndFunction

2.調(diào)用

Function過程的調(diào)用方法如下:

DimIAsInteger

I=PlusXY(1,2)

50

434參數(shù)傳遞機(jī)制簡介

大部分過程都含有參數(shù)。將Sub過程

或Function過程定義中出現(xiàn)的變量名稱

為形式參數(shù),而在調(diào)用時傳遞給Sub過程

和Function過程的常量、變量或表達(dá)式

稱為實際參數(shù)。將參數(shù)以變量形式傳遞

的過程稱為參數(shù)傳遞。

VB中參數(shù)傳遞機(jī)制有兩種:一種是

引用參數(shù)傳遞(默認(rèn)),另一種是按值

傳遞參數(shù)。

51

1.引用傳遞參數(shù)

這種方式將參數(shù)變量的內(nèi)存地址傳遞

給Sub或Function過程,過程通過內(nèi)存地

址訪問實際參數(shù)的內(nèi)容,從而可以方便

地改變實際參數(shù)的值。

52

PrivateSubChange(xAsInteger,yAsInteger)

,本程序修參數(shù)x,y的值互換

DimtAsInteger

t=x

x=y

y=t

,在窗體是輸出結(jié)果運行結(jié)果:

Print“x=”;x,“y=”;yx=4,y=3

EndSubA=4,b=3

PrivateSubForm_Click()我們發(fā)現(xiàn),調(diào)用

DimaAsIntegerChange過程后,

DimbAsInteger實際參數(shù)的

a=3:b=4a,b

Changea,b值也發(fā)生了變化。

Print"a=";ajb=”;b這就是引用傳遞

EndSub參數(shù)的執(zhí)行結(jié)果。

(演示)

53

2.按值傳遞參數(shù)

按值傳遞參數(shù)是只把參數(shù)的數(shù)值傳遞給過程,也稱傳值方式。

即傳遞給過程的只是實際參數(shù)的副本,即使過程調(diào)用時改

變了形式參數(shù)的值,實際參數(shù)也不會改變。

如果按值傳遞參數(shù),需要在定義過程時在形式參數(shù)前面加是G

關(guān)鍵字ByVai,例如上例中:

PrivateSubChange(ByValxAsInteger,ByVaiyAsInteger)

DimtAsInteger

t=x

x=y運行結(jié)果:

y=tx=4,y=3

,在窗體是輸出結(jié)果

a=3,b=4

Print“x=”;x,"y=”;y

EndSub

54

4.4鍵盤和鼠標(biāo)使用技巧

驅(qū)動VB應(yīng)用程序運行的主要動力是事

件響應(yīng)。在VB響應(yīng)的所有事件弋,數(shù)目最

多也最重要的是對鍵盤和鼠標(biāo)的響應(yīng)事件,

因為鍵盤和鼠標(biāo)是用戶和應(yīng)用程序交互的

主要工具。下面系統(tǒng)介紹鼠標(biāo)和鍵盤常用

事件的使用技巧和原理。

55

習(xí)題P116三、問答題

2.簡述參數(shù)傳遞機(jī)制

答:VB中參數(shù)傳遞機(jī)制有兩種:二時是引用參數(shù)傳遞

(默認(rèn)),另一種是按值傳遞參杷、

引用參數(shù)傳遞是將參數(shù)變量的內(nèi)存地址傳遞給

Sub或Function過程,過程通過內(nèi)存地址訪問實際參

數(shù)的內(nèi)容,從而可以方便地改變實際參數(shù)的值。

按值傳遞參數(shù)是只把參數(shù)的數(shù)值傳遞給過程,也

稱傳值方式。即傳遞給過程的只是實際參數(shù)的副本,

即使過程調(diào)用時改變了形式參數(shù)的值,實際參數(shù)也

不會改變。如果按值傳遞參數(shù),需要在定義過程時

在形式參數(shù)前面加是G關(guān)鍵字ByVaL

56

4.4.1響應(yīng)鍵盤事件

常用的鍵盤事件主要有KeyPress,KeyUp

和KeyDown。

KeyPress事件:用戶按下某ASCII字符的

鍵,因此它不是對所有的鍵盤碼均響應(yīng),

比如鍵盤上的刪除鍵。

KeyDown和KeyUp事件:按下或釋放鍵盤

上的任意鍵時均會觸發(fā)該事件,包括

Delete冊1除鍵。

57

1.焦點處理

窗體或控件(對象)、的肉點是對象活動

的標(biāo)志,在Windows應(yīng)用中,可以同時運行

幾個應(yīng)用程序,但只有具有焦點的應(yīng)用程序

才有活動標(biāo)題欄,才能接受用戶輸入。在同

一窗體中,也只有具有焦點的的TextBox文

本框才能接受鍵盤輸入??傊挥蝎@得焦點

的窗體或控件才能接受鍵盤事件。所以在處

理鍵盤事件嵌,應(yīng)首先對焦點進(jìn)行處理。

58

實現(xiàn)控件焦點的兩種方法

(1)SetFocus方法

在程序運行時,通過鼠標(biāo)選擇操作或控件

的SetFocus方法實現(xiàn)。

VB所提供的標(biāo)準(zhǔn)控件一般都需一個

SetFocus方法。通過該方法可以把焦點賦予

指定的控件,是一種靈活的焦點控制方法。

比如希望在程序運行期的某個階段,使某個

控件后得焦點被激活,可使用以下代碼:

控件名.SeFocus

59

實現(xiàn)控件焦點的兩種方法

(2)利用Tab控制鍵

VB所有可被設(shè)置焦點的控件均具有一個

Tablndex屬性。默認(rèn)情況些,在窗體上創(chuàng)建的第一

個控件的Tablndex的值為0,第一個控件的

Tablndex的值為L移此類推??砂搭A(yù)先設(shè)計好的

順序,改變控件的Tablndex的值。這樣就可以在程

序運行期間,通過Tab鍵使焦點按Tabindex的值,

從小到大在眾多控件中切換。

如果不希望使某些控件獲得焦點,就可以把該

控件的TabStop屬性值設(shè)置為False。當(dāng)然,如果控

件不可視(Visible=False)或不可用

(Enabled=False),也不可能獲得焦點了。

60

習(xí)題P116二、填空題

3.如果不希望某個控件獲得焦點,則可以

將它的_______屬性設(shè)置為False^^

答案:TabStop

61

習(xí)題P116三、問答題

4.什么是焦點,設(shè)置控件焦點有哪些方法?

答:窗體或控件(對象)的焦青是對象活

動的標(biāo)志,只有獲得焦點的窗體或控件

才能接受鍵盤事件。

設(shè)置控件焦點的兩種方法:

①SetFocus方法:控件名.SeFocus

②按預(yù)先設(shè)計好的順序,改變控件的1

Tablndex的值。

62

2.窗體的鍵盤事件

如果希望無論何時按下某個鍵,都會同時

執(zhí)行同一操作,而不管此時到底哪個控

件具有焦點的話,就可以使用窗體的鍵

盤事件。具體方法是:首先將窗體出、

KeyPreview屬性設(shè)置為True,然后再編

寫相應(yīng)的鍵盤事件處理程序。

63

1.KeyDown和KeyUp事件分析

計算機(jī)鍵盤上的If鍵均有一個鍵碼,

稱為鍵碼。KeyCode參數(shù)返回了鍵盤的鍵碼值。

通過它判斷用戶按下哪個鍵。既可以用數(shù)字也可

以利用VB提供的鍵碼常數(shù)進(jìn)行判斷處理,比如

vbKeyFl(Fl鍵)、vbKeyHome(Home鍵)、

vbKeyA(A和a鍵)等。例如:

IfKeyCode=vbKeyBackThen

IfKeyCode=vbKeyDeleteThen

64

(2)Shift參數(shù)

通過該參數(shù)判斷用戶是春下了Shift、

Ctr1或Alt鍵。例如:

IfShift=vbShiftMaskThen

IfShift=vbCtrIMaskThen

IfShift=vbAlttMaskThen

If(Shift=vbAltMask)And(KeyCode=VbKeyA)Then

65

3.KeyPress事件

KeyPress事件發(fā)生于KeyDown和KeyUp之間,它只有一個

KeyAscii參數(shù),反映了用戶通過鍵盤輸入的字符的

ASCH碼。

當(dāng)需要處理標(biāo)準(zhǔn)ASCII字符時可使用這個事件,但要處理

擴(kuò)展字符鍵、組合鍵和定位鍵時,則只能使用KeyDown

和KeyUp事件。例如:\:

PrivateSubTextl.KeyPress(IndexAs

Integer,KeyAsciiAsInteger)

,只允許輸入數(shù)字,其中用到的數(shù)字48和57分別表示字符

0和9的ASCII碼

If(KeyAscii<48)Or(KeyAscii>57)Then

KeyAscii=0

EndIf

EndSub

66

常用鍵盤碼與ASCH碼的對應(yīng)關(guān)系

按鍵鍵碼常數(shù)ASCH碼數(shù)字是否相等

BackspacevbKeyBack8是

EntervbKeyReturn13是

SpacevbKeySpace33\是

TabvbKeyTab9是

EscvbKeyEscape27是

A?ZvbKeyA?vbKeyZ65?90是

a?zvbKeyA~vbKeyZ97?122否

?vbKeyDecimal46

0?9vbKeyO?vbKey948?57

DeletevbKeyDelete——

Fl?!F16vbKeyFl?vbKeyF16——

鍵碼未必都有對應(yīng)的ASCII碼。A和a的ASCII碼不同,但它

們在鍵盤上是一個按鍵,因此鍵碼是一樣的。

67

習(xí)題P116一、單項選擇題

5.鍵盤事件的執(zhí)行順序票、、J。

A.KeyPress,KeyDown,KeyUp

B.KeyDown,KeyPress,KeyUp

C.KeyUp,KeyDown,KeyPress

D.KeyUp,KeyPress,KeyDown

答案:B

68

習(xí)題P116四、程序設(shè)計題

2.鍵盤按鍵程序。請使施sBox過程對窗體的

KeyDown和KeyPress事件編程,以顯示按下、

放開一個鍵時事件的發(fā)生過程。比如,當(dāng)按下

了A鍵時程序界面如圖所示。

鍵盤按鍵程序

KeyDo附n事件發(fā)生了1KeyCode的值是:65

Shi久參數(shù)的值是:0

69

代碼設(shè)計:

PrivateSubTextl_KeyDown(KeyCodeAsInteger,ShiftAsInteger)

MsgBox"KeyDown事件發(fā)生了,KeyCode的值是:n_

&KeyCode&Chr(13)&_

“Shift參數(shù)的值是:"&Shift,0,”鍵盤按鍵程序”

EndSub

PrivateSubTextl_KeyPress(KeyAsciiAsInteger)

MsgBox"KeyPress事件發(fā)生了,KeyAscii的值是:n_

&KeyAscii,0,”鍵盤按鍵程序”

EndSub

PrivateSubTextl_KeyUp(KeyCodeAsInteger

溫馨提示

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

最新文檔

評論

0/150

提交評論