版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣西欽州市北部灣大學(xué)招聘高層次人才76人備考題庫(含答案詳解)
- 2026年機(jī)械設(shè)計制造專業(yè)知識題庫精講與答案解析
- 2026浙江衢州職業(yè)技術(shù)學(xué)院高層次緊缺人才招聘32人考試參考試題及答案解析
- 2026年第六師五家渠市“百名碩士進(jìn)六師”高層次人才引進(jìn)備考題庫(15人)帶答案詳解
- 2026江西南昌市勞動保障事務(wù)代理中心招聘非全日制白案廚師1名備考題庫及參考答案詳解
- 2026山東臨沂市榮軍優(yōu)撫醫(yī)院(臨沂市心理醫(yī)院)招聘綜合類崗位2人備考題庫及參考答案詳解一套
- 吉陽學(xué)校2026年公開選調(diào)義務(wù)教育教師【26人】備考考試試題及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考北京積水潭醫(yī)院貴州醫(yī)院招聘16人考試參考試題及答案解析
- 江西技師學(xué)院2026年春季學(xué)期兼職教師招聘13人備考考試試題及答案解析
- 2026國家會展中心(天津)有限責(zé)任公司實習(xí)生招募4人備考題庫含答案詳解
- 洗浴員工協(xié)議書
- 園區(qū)托管運營協(xié)議書
- 清欠歷史舊賬協(xié)議書
- 臨床創(chuàng)新驅(qū)動下高效型護(hù)理查房模式-Rounds護(hù)士查房模式及總結(jié)展望
- 乙肝疫苗接種培訓(xùn)
- GB/T 45133-2025氣體分析混合氣體組成的測定基于單點和兩點校準(zhǔn)的比較法
- 食品代加工業(yè)務(wù)合同樣本(版)
- 北京市行業(yè)用水定額匯編(2024年版)
- 安全生產(chǎn)應(yīng)急平臺體系及專業(yè)應(yīng)急救援隊伍建設(shè)項目可行性研究報告
- 中國傳統(tǒng)美食餃子歷史起源民俗象征意義介紹課件
- 醫(yī)療器械樣品檢驗管理制度
評論
0/150
提交評論