版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
代碼基礎(chǔ):
變量的簡(jiǎn)單定義格式:dim變量名這種定義未指明變量的數(shù)據(jù)類型,這時(shí)的變量類型是"
變體類型”,它自動(dòng)識(shí)別字符串或數(shù)字(字符串要加引號(hào))。
數(shù)據(jù)類型的定義方法:
定義變量最簡(jiǎn)單的方法是用“Dim”關(guān)鍵字,它的語法:
Dim【變量名】As【數(shù)據(jù)類型】
如:DimIndexAsInteger
也可以在一行中定義多個(gè)變量,如:
DimIndexAsInteger,NumberAsLong
但把多個(gè)變量定義成同一類型不能寫:
DimIndex,NumberAsInteger,這樣實(shí)際index是變體變量。
有時(shí)為了簡(jiǎn)便,也以符號(hào)進(jìn)行簡(jiǎn)單的定義,作用是和上面一樣的。整型可以用“%”代替,長(zhǎng)
整型可以用代替,單精度可以用"!”,雙精度實(shí)型可以用"#"定義,字符型用如剛才的
第一個(gè)例子可以寫成:
DimIndex%等價(jià)于DimIndexAsInteger
對(duì)于常量的定義用Const定義,如:ConstCOLOR=255。
constPI=3.1415926
注:變量一般用小寫,常量則全部大寫。
對(duì)于程序中經(jīng)常出現(xiàn)的數(shù)值,應(yīng)設(shè)常量,這樣一是書寫方便,其二,如果要改變?cè)摂?shù)值,只
需改變定義常量的語句值,而不需改變每個(gè)語句,提高了效率。
重點(diǎn)筆記:變量
變量名要以字母開頭,在變量名中唯一能用的符號(hào)是下劃線(_),相同的大寫或小寫字母的
變量,視為同一變量,即不區(qū)分大小寫。
變量的作用范圍關(guān)健字:Public(公用),Private(單個(gè)模塊),Dim(局部);在VB代碼區(qū)
域中包含四類模塊區(qū)域:窗體,MDI窗體,標(biāo)準(zhǔn)模塊,類模塊。這是第一層;每一模塊區(qū)
域又分成了通用區(qū)域和過程區(qū)域,這是第二層。這就是VB的結(jié)構(gòu),各個(gè)區(qū)域之間界線分明。
變量受這些因素的影響也要采用不同方式,標(biāo)明它的作用范圍是全局還是單個(gè)模塊還是單個(gè)
過程。
1,在單個(gè)事件過程中可見的:在本過程內(nèi)部用DIM關(guān)健字;
2,在單個(gè)模塊中可見的:在本模塊頂部(窗體模塊會(huì)標(biāo)明"通用"字樣)聲明段用Private關(guān)
健字(也可用DIM關(guān)健字);注意,不能在一個(gè)過程內(nèi)部聲明模塊級(jí)變量。
3,在所有模塊可見的:在任一模塊頂部(窗體模塊會(huì)標(biāo)明”通用“字樣)聲明段用Public關(guān)
健字,注意:1,在Form窗體模塊頂部的“通用”部分不能聲明public的數(shù)組,常數(shù),結(jié)構(gòu)類
型和API函數(shù)。2,在一個(gè)過程的內(nèi)部不能聲明公用變量。
在一個(gè)事件中用DIM聲明的局部變量,每次觸發(fā)時(shí)產(chǎn)生,完成后消失,不會(huì)保留事件運(yùn)行
后的值;如果要一直保留一個(gè)局部變量的值,要使用-靜態(tài)變量.在過程內(nèi)部用static關(guān)健
字聲明,它能在第二次觸發(fā)該事件時(shí)保留前一次運(yùn)行結(jié)果,繼續(xù)運(yùn)算,而不會(huì)來個(gè)"重新DIM,
初始化”,它只在運(yùn)行時(shí)第一次觸發(fā)該事件時(shí)進(jìn)行初始化。
注:靜態(tài)變量如果要初賦值,不能直接進(jìn)行,要根據(jù)變量未賦值的狀態(tài)使用if語句,如Ixn
為變體變量:iflxn=EMPTYthenlxn=336525,例下:
PrivateSubCommandl_Click()
StaticIxnAsInteger
Ixn=5錯(cuò)??!應(yīng)改為IfIxn=0ThenIxn=5
Ixn=Ixn+1
PrintIxn
EndSub
變量的數(shù)據(jù)類型:
一,數(shù)值型。
1,整型(integer),聲明字符%,范圍-32768到32768。占用2字節(jié)。
2,長(zhǎng)整型(long),聲明字符&,范圍-2147483648到2147483648。占用4字節(jié)。
3,單精度實(shí)型(single),聲明字符!,小數(shù)點(diǎn)后有效數(shù)字7位,占用4字節(jié)。
4,雙精度實(shí)型(double),聲明字符#,小數(shù)點(diǎn)后有效數(shù)字15位,占用8字節(jié)。
5,貨幣型(currency),聲明字符(Email地址中的那個(gè)at號(hào)"小老鼠"),這種類型精度高,
專用于貨幣計(jì)算或定點(diǎn)計(jì)算,小數(shù)點(diǎn)后有效數(shù)字4位,占用8字節(jié)。
6,字節(jié)型(byte),存儲(chǔ)0--255之間的整數(shù),常用來存儲(chǔ)二進(jìn)制數(shù)據(jù),圖形和聲音文件等,
它只占1個(gè)字節(jié),節(jié)省資源!
二,字符串型(string),聲明字符$.
1,變長(zhǎng)字符串變量,平常定義的如:dim(public)1xnasstring,運(yùn)行時(shí)自動(dòng)調(diào)整長(zhǎng)度。
2,定長(zhǎng)字符串變量,定義如:dim(public)lxnasstring*50,這時(shí)Ixn被定義為包含50個(gè)字符
的變量,給它賦值時(shí)若少于50個(gè)字符,則用空格補(bǔ)足(要?jiǎng)h除空格用Trim和RTrim函數(shù)),
多于50個(gè)則刪掉。使用定長(zhǎng)字符串的情形如在隨機(jī)文件的讀寫操作中,注:定長(zhǎng)字符串不
能在類模塊中定義為公用(public)變量。
三,日期型(date)
任何可辯認(rèn)的文本日期都可賦值給date變量,日期文字前后要加上#號(hào),或直接用文本定義,
格式:dim變量名asdate.
dimIxnasdate
賦值格式:變量=#(或')月/日/年/時(shí):分:秒AM或PM#(或")
lxn=#06/14/0120:50:31AM#或
lxn="06/14/018:50:31PM"
如果是一個(gè)數(shù)值直接賦給日期型變量,如lxn=35477.998,則小數(shù)點(diǎn)左邊的值代表日期信息,
小數(shù)點(diǎn)右邊的值代表時(shí)間信息(如午夜為0中午為0.5),上面Ixn的時(shí)間值顯示為97-2-16
23:57:07.(我沒看懂)。
四,邏輯型(boolean)
也叫布爾型變量,它只有兩個(gè)值:true(-l)和false(O).[問題:當(dāng)為true時(shí)值是1還是一1?我
試了?一下是一1,即用printcint(x)試的。]
五。變體型(variant)
可適用于各種數(shù)據(jù)類型,一個(gè)沒有指明類型的變量VB就指定為此類型。
六,對(duì)象型(object或commandbutton或textbox等對(duì)象名,模塊名)
這種變量為指向程序中對(duì)象的指針,先聲明為某類型對(duì)象,格式:
dim變量as對(duì)象類型名(如果對(duì)象為object,則表示可指向任何類型對(duì)象)dimIxnas
commandbutton(定義Ixn為按紐對(duì)象類指針),
賦值格式:set變量名=對(duì)象名稱
Setlxn=command1
這時(shí),就可以用Ixn來代替command1了,如:lxn.caption="退出"
注:如果加上New關(guān)健字,可以新建窗體,類模塊,對(duì)象庫中的對(duì)象,對(duì)象變量就成了1
個(gè)對(duì)象。Set變量名=New對(duì)象名稱。
七,自定義類型,也叫結(jié)構(gòu)類型。
第1步:建立類型:必須在模塊級(jí)用type語句定義,格式:
private(或public)type類型名
成員1as類型
成員2as類型……
endtype
如:privatetypeIdd
aasstring
basinteger
casstring
endtype
第2步:定義此類型的一個(gè)變量:格式:
dim(或public等)變量名as剛才創(chuàng)建的類型
如:dimIxnasIdd
第3步:變量的賦值及使用:用點(diǎn)號(hào)連接每一個(gè)成員,分別賦值,賦值格式:
變量.成員1=值
變量.成員2=值……
如:lxn.a="李小敏"
lxn.b=336525
lxn.c="李新寧"
凡是在程序中使用時(shí),就要以“變量.成員名”來引用。
八,枚舉類型。在模塊通用部分聲明,格式:
Private(Public)Enum類型名privateenumIxn
成員1(可選=常數(shù))李新寧
成員2(=常數(shù))……李小敏
endEnumendEnum
然后在程序中定義一個(gè)此類型變量,Dim變量as類型。如:dimmasIxn
意思是:變量m的"取值范圍”是:李新寧(值為0)或李小敏(值為1)
"值為0"?不給成員賦值,缺省狀態(tài)時(shí)第1個(gè)成員為0(相當(dāng)于寫:李新寧=0)
第2個(gè)成員為1…類推,總之成員的值為一個(gè)“長(zhǎng)整數(shù)”??勺约嘿x給。枚舉類型的作用是在
代碼中可簡(jiǎn)化某些總在幾個(gè)值之間切換的情況,引用如寫ifm=李新寧thenend
(這種類型實(shí)用價(jià)值不大)。
變量數(shù)據(jù)類型的轉(zhuǎn)換,有以下函數(shù):
cbool(字符串或數(shù)值表達(dá)式)--返回布爾類型,如:a=2:b=2:lxn=cbool(a=b)
那么Ixn值為true
cbyte(O到255的整數(shù))一返回BYTE類型
ccur(參數(shù))-返回貨幣型
cdate(一個(gè)有效的日期表達(dá)式)-轉(zhuǎn)換為日期型
cint(參數(shù))-返回(或叫轉(zhuǎn)換)integer型,參數(shù)的小數(shù)部分四舍五入
clng(參數(shù))-返回long型,小數(shù)部分四舍五入。
csng(參數(shù))--返回single(單精度)型,
cdbl(參數(shù))一返回double(雙精度)型。
cvar(參數(shù))-返回變體型
cstr(參數(shù))--返回string字符串型。
判斷代碼中一個(gè)變量的數(shù)據(jù)類型的函數(shù):vartype(變量名)或typename(變量名),vartype(變
量名)返回一個(gè)整數(shù)值,如返回2代表整型,3代表長(zhǎng)整型,4代表單精度,5代表雙精度,
7代表日期型,8代表字符串等。例如有個(gè)叫Ixn的變量,不知它是什么類型,可用
x=vartype(lxn),如果x等于2就說明Ixn是整型,8就是字符串等等。lypename(變量名)返回
一個(gè)該變量類型名的字符串,如Ixn是整型變量,那么typename(lxn)返回值為“integer"字符
串。
★數(shù)組的定義類似于變量定義,所不同的是數(shù)組需要指定數(shù)組中的元素個(gè)數(shù),例如:
Dimlxn(99)AsInteger
這個(gè)數(shù)組中包含100個(gè)元素,下標(biāo)從0到990
也可以指定下標(biāo)的起始值,例如:
Dimlxn(2to10)AsInteger
這個(gè)數(shù)組含有九個(gè)元素,下標(biāo)從2至U10。
還可以定義多維數(shù)組:
Dimlxn(4,2to5,3to6)AsInteger
上例定義了一個(gè)三維數(shù)組(4X4X4)。
★VB算術(shù)運(yùn)算符:+(加),-(減),*(乘),/(除),\(整除),Mod(取余數(shù)),人(乘
方),&(字符串連接)
算術(shù)運(yùn)算符優(yōu)先級(jí):()括號(hào);八乘方;-負(fù)號(hào);*。/乘,除;'整除;Mod取余;+,-加,減
VB比較運(yùn)算符:=(等于),<>(不等于),〈(小于),>(大于),<=(小于等于),>=(大于等于)
邏輯運(yùn)算符:And:兩邊表達(dá)式為真時(shí),結(jié)果為真;
Or:兩邊表達(dá)式只要有一個(gè)為真時(shí),結(jié)果為真;
Not:后面跟的表達(dá)式若為真,結(jié)果為假,后跟表達(dá)式為假,結(jié)果為真;
Xor:兩邊表達(dá)式一真一假時(shí),結(jié)果為真,若兩邊表達(dá)式同真同假,結(jié)果為假。★IF……
THEN語句:
簡(jiǎn)單:if條件then語句
復(fù)雜:if條件1then
語句11
語句12
語句13……
elseif條件2then
語句21
語句22
語句23……
elseif條件3then
else
前面條件都不成立時(shí)執(zhí)行語句
endif
分支結(jié)構(gòu):selectcase語句
結(jié)構(gòu):selectcase變量(也可以是一個(gè)屬性或表達(dá)式)
case可能值一(數(shù)值,字符串或其他值)
語句
case可能值二
語句
case可能值三
語句
case可能值四,可能值五,可能值六……(如果有多個(gè)可能值都執(zhí)行一條語句,寫在一起,
用逗號(hào)隔開)
語句
caseelse(也可以沒有)
語句
endselect
在selectcase語句中可以使用關(guān)系運(yùn)算符大于,小于〈等于二等關(guān)系運(yùn)算符,需要用關(guān)鍵字IS
和TO。用個(gè)例子來說明:
PrivateSubCommandl_Click()
DimageAsInteger
age=Textl.Text
SelectCaseage
CaseIs<14(如果age小于14時(shí))
Label1.Caption="小朋友,你好!”
Case14To23(如果age在14至lj23時(shí))
Labell.C叩lion="學(xué)生朋友,認(rèn)真讀書吧?!?/p>
Case24(如果age是24時(shí))
Label1.Caption="你和我是同齡人”
CaseIs>100(如果age大于100時(shí))
Label1.Caption="你真是個(gè)老不死!”
CaseElse(如果age不滿足以上所有值的范圍時(shí))
Labell.Caption="按道理我要尊重你。”
EndSelect
EndSub
看會(huì)了吧,就照著用即可。
循環(huán)結(jié)構(gòu):FOR……NEXT……語句:
格式:FOR循環(huán)變量=初值TO終值STEP步長(zhǎng)
循環(huán)體
NEXT循環(huán)變量
如果在循環(huán)執(zhí)行過程還未結(jié)束時(shí)要跳出循環(huán),可用exitfor語句。
例:PrivateSubCommand2_Click()
Dima%,name$
Fora=1To10
name=InputBox,輸入姓名”)
Printname
Ifname=nlxnHThenExitFor
Nexta
EndSub
第二種很重要的循環(huán)結(jié)構(gòu)是:DO循環(huán)
格式:A。DOWHILE條件
循環(huán)體
LOOP
BoDO
循環(huán)體
LOOPWHILE條件
將WHILE條件放在循環(huán)體的前面與后面,是不同的,A格式的條件在前,執(zhí)行時(shí)先檢測(cè)條
件,為真則執(zhí)行循環(huán),為假則不執(zhí)行循環(huán),如果第一次檢測(cè)條件即為假,則一次也不執(zhí)行循
環(huán),B格式的結(jié)構(gòu)WHILE條件在后,能保證不論條件的真假至少能執(zhí)行一次循環(huán)。
例:PrivateSubForm_Load()
Dimhs$,ss%
Do
hs=InputBox("輸入","華氏")-INPUTBOX的提示欄,標(biāo)題欄,它的所有輸入都是字符型
ss=Int((Val(hs)+40)*5/9-40)
MsgBoxss,,"攝氏度"--MSGBOX的輸出內(nèi)容,標(biāo)題欄,無按紐參數(shù)
LoopWhilehs<>""但逗號(hào)不能少
end-由于是在formjoad事件中,所以這個(gè)end不可丟。
EndSub
上例將華氏溫度轉(zhuǎn)為攝氏度。
★編寫對(duì)象的自動(dòng)拖放操作:
lo將要拖放對(duì)象的dragmode屬性設(shè)置為1(這樣就可自動(dòng)拖動(dòng))
20設(shè)置要拖放對(duì)象在拖動(dòng)過程中的圖標(biāo)提示:dragicon屬性。
3。編寫拖放終點(diǎn)對(duì)象的dragdrop事件(或dragover事件)過程。
例:將窗體上圖片框1的圖片拖到圖片框2里:
PrivateSubForm_Load()
Image1.Picture=LoadPicture(”c:\我的文檔'mywebs'紅樓夢(mèng)4.bmp")加載圖片
Image1.DragMode=1對(duì)象可移動(dòng)
Image1.Dragicon=LoadPicture(nc:\ucdos\ico\print.icon)移動(dòng)時(shí)的圖標(biāo)
EndSub
PrivateSubImage2_DragDrop(SourceAsControl,XAsSingle,YAsSingle)
Image1.Visible=False當(dāng)移到圖片框2時(shí),圖片框1隱藏。
Image2.Picture=Image1.Picture將圖片復(fù)制到圖片框2中
EndSub
在image2的dragdrop事件中有三個(gè)參數(shù):source和x以及y,source的意思是“源對(duì)象”,即
要拖動(dòng)對(duì)象,這里可用它來代替image1,如在事件過程中寫:source.visible=
falseimage2.picture=source.picture
★在窗體中添加簡(jiǎn)單的動(dòng)畫:對(duì)象的移動(dòng)MOVE方法:
要移動(dòng)的對(duì)象.MOVE移動(dòng)后橫坐標(biāo),縱坐標(biāo),寬度,高度
piclurel.move800,500(單位:堤;1堤=1/1440英寸
用MOVE方法不僅可以移動(dòng)對(duì)象位置,而且可以改變對(duì)象的尺寸大小,如下:
對(duì)象名.moveleft,top,width,height
Form1.Move5000,0,5000,50(注:?jiǎn)挝粸榈?
例:PrivateSubForm_Load()
Picture1.Picture=LoadPicture("c:\我的文檔'mywebs'紅樓夢(mèng)l.bmp")
Timerl.Interval=1
Timer2.Interval=1
Timerl.Enabled=True
Timer2.Enabled=False
EndSub
PrivateSubTimerl_Timer()
IfPicturel.Left>0AndPicturel.Top>0Then
Picture1.Left=Picturel.Left-50
Picturel.Top=Picture1.Top-70
Else
Timer2.Enabled=True
Timerl.Enabled=False
EndIf
Picture1.MovePicturel.Left,Picturel.Top
EndSub
PrivateSubTimer2_Timer()
IfPicturel.Left<5000AndPicturel.Top<3000Then
Picturel.Left=Picturel.Left+50
Picture1.Top=Picturel.Top+70
Else
Timerl.Enabled=True
Timer2.Enabled=False
EndIf
Picture1.MovePicture1.Left,Picturel.Top
EndSub
★添加標(biāo)準(zhǔn)模塊:"工程"菜單"添加模塊"菜單項(xiàng)。module1是缺省模塊名。此名字可在其
屬性窗口中改變(只有此一項(xiàng)“屬性")。標(biāo)準(zhǔn)模塊與窗體模塊并列于一個(gè)工程之內(nèi)。
在標(biāo)準(zhǔn)模塊中聲明公用變量(或叫全局變量)格式:
public變量名as類型
publicIxn
在前面我們用DIM定義變量,它們都只是局部變量,即只在某個(gè)事件過程中可見,而在標(biāo)
準(zhǔn)模塊中定義的全局變量,則在整個(gè)工程中可見,即定義一次之后在其它任何事件中可直接
訪問。
在標(biāo)準(zhǔn)模塊中創(chuàng)建通用過程:通用過程在整個(gè)程序中可見。象全局變量一樣。
可創(chuàng)建三種類型的通用過程:函數(shù)過程,子過程(也叫sub過程),屬性過程
函數(shù)的語法格式:publicfunction函數(shù)名(形參表)as返回值類型(這個(gè)"as返回值類型"
不能丟?。。┖瘮?shù)體
函數(shù)名=返回值
Endfunction
在事件過程中調(diào)用函數(shù)的方式為:變量=函數(shù)名(實(shí)參)-它代表一個(gè)確定值,本質(zhì)是一個(gè)
變量,可以出現(xiàn)在變量可出現(xiàn)的任何地方。
附出錯(cuò)經(jīng)驗(yàn)一則:我想在一個(gè)事件中用個(gè)變量a,使第一次單擊該事件時(shí)a=l,第二次單擊該事
件時(shí)a=2;第三次單擊該事件時(shí)a值為3,即自增1的運(yùn)算,我在事件中寫:dima
a=l
a=a+l
可每次單擊都得到同一個(gè)值2,原來,這是因?yàn)閍是該事件中的局部變量,
每單擊一次就重新執(zhí)行一次,后來,我想在form」oad()事件中寫:dimaa=l,
然后在該事件中只寫a=a+l,結(jié)果卻變成a每次都是1,怎么回事?form_load事件不是每次
程序運(yùn)行時(shí)自動(dòng)運(yùn)行的嗎,沒錯(cuò),但form」oad本身也只是一個(gè)事件,在其中定的變量
dima也屬局部變量,只在form_load一個(gè)事件中可見,因此在另一個(gè)事件中用到的a根本
沒定義,如何定義一個(gè)變量在同一個(gè)窗體模塊中各事件均可見呢?那就是在“(通用)"部分
進(jìn)行變量的聲明,這樣在該窗體模塊中都可見,但通用部分不能直接進(jìn)行賦值等運(yùn)算(可按
格式編寫函數(shù),子程序等等,同標(biāo)準(zhǔn)模塊),參考辦法:(通用):dimaform」oad():(在其他
事件也可,只要在引用a值的那個(gè)事件前能賦a=l即可)a=l引用a的事件:a=a+l
,”對(duì)象.屬性名”的本質(zhì)是一個(gè)變量,是在該窗體模塊(通用)中缺省聲明的變量
在標(biāo)準(zhǔn)模塊中創(chuàng)建子過程:格式:publicsub子過程名稱(形參)-此處要括號(hào)
過程體
endsub
函數(shù)與sub過程的不同是:函數(shù)用其名字返回一個(gè)值,子過程處理一段程序過程,無返回值。
在標(biāo)準(zhǔn)模塊子過程中設(shè)置某個(gè)對(duì)象屬性時(shí),必須指明哪個(gè)窗體,如:publicsublxn()
form1.image1.visible=trueendsub其中那個(gè)"forml."不能丟。
在事件中調(diào)用子過程的格式:子過程名稱實(shí)參-這里的實(shí)參不要用括號(hào),如果調(diào)用時(shí)作
為表達(dá)式才要括號(hào),多個(gè)實(shí)參用逗號(hào)分開。
不論是函數(shù)或是sub過程,其形參與實(shí)參之間必須保證類型與數(shù)量的一致。
★在文本框的一個(gè)輸入字符串尾加上"&chr(13)+chr(10)”,它能自動(dòng)換行。或者用VB的常
數(shù)vbCrLf也可換行。相當(dāng)于C中的"\n".如:a$="李新寧"&chr(13)+chr(10)textl.text=a$
★什么是集合?集合是一組相關(guān)的對(duì)象。
窗體上的全部對(duì)象被稱作controls(控件)集合,如果一個(gè)程序有多個(gè)窗體,就要在前面加
上窗體名稱,如:forml.controls,每個(gè)窗體都有一個(gè)controls集合。這種"集合"被視作也是該
窗體的一個(gè)對(duì)象,它與窗體的關(guān)系地位有點(diǎn)象windows的文件夾。可以通過集合引用其中
的對(duì)象,格式一,直接使用(集合名!元素):
窗體名稱.controls!對(duì)象名稱.屬性=屬性值
form1.controls!label1.caplion="李新寧"
注:其中的感嘆號(hào)是controls集合與對(duì)象的連接符號(hào)
格式二,采用該對(duì)象在controls中的索引值(集合名(索引)):
窗體名稱.controls(索引值).屬性名=屬性值
form1.controls⑴.caption="李新寧"
注:一個(gè)對(duì)象在其所在窗體controls集合中的下標(biāo)是如何排列的呢?-按對(duì)象創(chuàng)建時(shí)的順序
逆向確定其下標(biāo)值,最后一個(gè)創(chuàng)建的對(duì)象下標(biāo)為0,倒數(shù)第二創(chuàng)建的那個(gè)對(duì)象下標(biāo)為1,如
果該窗體共有n個(gè)對(duì)象,那么一開始創(chuàng)建的那個(gè)對(duì)象的下標(biāo)為n-1.
集合的運(yùn)用:FOREACH-IN-NEXT循環(huán),對(duì)一組對(duì)象(對(duì)象組)的操作。
格式:FOREACH對(duì)象變量IN集合名
對(duì)當(dāng)前對(duì)象的操作過程
NEXT對(duì)象變量
以上用于對(duì)一組對(duì)象的操作,例如將窗體上所有對(duì)象的位置向左移1000堤:
PrivateSubCommandl_Click()
ForEachIxnInControlsIxn是"當(dāng)前對(duì)象"的"替身"
Ixn.Left=Ixn.Left+1000將當(dāng)前對(duì)象的left屬性加1000
NextIxn下一個(gè)controls里的成員
EndSub
如果是有目的地選擇一部分對(duì)象的移動(dòng),怎么辦呢?可以利用對(duì)象的標(biāo)記tag屬性,區(qū)別不
同對(duì)象,下例tag屬性值為Ixm的對(duì)象就不移動(dòng),
PrivateSubCommandl_Click()
ForEachIxnInControls—controls中的每個(gè)對(duì)象
Iflxn.Tago"Ixm"Then
Ixn.Left=Ixn.Left+1000
EndIf
NextIxn
EndSub
PrivateSubForm_Load()
Command1.Tag="Ixm"-tag是個(gè)有趣的屬性,它可以由程序員指定一個(gè)
EndSub該對(duì)象的“標(biāo)記”,好區(qū)別其他相關(guān)對(duì)象。
集合不僅有controls一種,還有其他如窗體集合,數(shù)據(jù)庫集合等,值得重視。
★數(shù)組:固定了元素?cái)?shù)量的數(shù)組叫定長(zhǎng)數(shù)組,元素?cái)?shù)量可在程序運(yùn)行中改變的數(shù)組叫動(dòng)態(tài)
數(shù)組。
定長(zhǎng)數(shù)組的聲明:全程(公用)數(shù)組(在標(biāo)準(zhǔn)模塊中):
public數(shù)組名(第1維長(zhǎng)度,第2維長(zhǎng)度,……)as數(shù)據(jù)類型
局部數(shù)組(在某事件中):
static數(shù)組名(第1維長(zhǎng)度,第2維長(zhǎng)度,……)as數(shù)據(jù)類型
例:publiclxn(19)asstring下標(biāo)從0到19共20個(gè)元素。
創(chuàng)建動(dòng)態(tài)數(shù)組:步驟:1。不指明下標(biāo)定義數(shù)組。如publiclxn()asinteger,同時(shí)在標(biāo)準(zhǔn)模塊中
定義一個(gè)變量。如:publicaasinteger
2.在程序某處設(shè)置一個(gè)變量(或其他可確定值)值,如:a=inputbox("輸入“,”個(gè)數(shù)");
3。用redim語句確定數(shù)組大小。如:redimlxn(a)
也可以不用第3步,直接在數(shù)組使用時(shí)用a限定其FOR……NEXT……循環(huán)上限。
forx=ltoa
lxn(x)=
nextx
在一個(gè)事件的中途要退出這個(gè)事件,用ExitSub關(guān)鍵字。
★VB程序中的出錯(cuò)處理:錯(cuò)誤處理程序使程序在出錯(cuò)時(shí)繼續(xù)運(yùn)行,處理出錯(cuò)的步驟是:
1,在程序中可能出錯(cuò)的語句前加上一條語句:
onerrorgoto標(biāo)號(hào):
如:onerrorgoloIxn:
此處標(biāo)號(hào)是當(dāng)onerror后一條語句出錯(cuò)時(shí),程序?qū)⑥D(zhuǎn)到標(biāo)號(hào)指定的”錯(cuò)誤處理程序段“。通常
放在本事件過程的底部。如果只是出錯(cuò)時(shí)起語旬轉(zhuǎn)向的作用,則"錯(cuò)誤處理程序段"可空。但
標(biāo)號(hào)及冒號(hào)不能少,如:
commondialog1.cancelerror=true列出出錯(cuò)的情形
onen-orgotoIxn:出錯(cuò)時(shí)轉(zhuǎn)向Ixn:
commondialog1.showsave如果用戶單擊了"取消"按紐,就會(huì)"出錯(cuò)"。
Ixn:為空,只是跳過事件體,直按endsub了。
endsub
如果只是出錯(cuò)時(shí)將程序轉(zhuǎn)到下一句,只要在出錯(cuò)語句前加上OnErrorResumeNext.
真正的錯(cuò)誤處理程序要用到一個(gè)屬性變量:Err.Number,它就是在遇到程序崩潰時(shí)對(duì)話框中
的那個(gè)數(shù)字,表示是第幾號(hào)的錯(cuò)誤。另外,在事件底部,錯(cuò)誤處理程序開始的標(biāo)號(hào)前,一般
要加上ExitSub語句,以便使程序在無錯(cuò)的情況下不會(huì)去執(zhí)行錯(cuò)誤處理段。在錯(cuò)誤處理程
序結(jié)束時(shí),要用"resume"將程序執(zhí)行順序返回程序中。resume后可跟標(biāo)號(hào),舉一個(gè)例子如下:
privatesubcommandl_click()
onerrorgotoIxn:出錯(cuò)時(shí)轉(zhuǎn)向Ixn:
exitsub防止程序正常時(shí)也執(zhí)行后面的出錯(cuò)程序,因此無錯(cuò)時(shí)結(jié)束事件。
Ixn:出錯(cuò)程序段標(biāo)號(hào)(名稱)
iferr.number=71then如果出現(xiàn)71號(hào)錯(cuò)誤
msgbox("軟驅(qū)門沒關(guān)好"),,“軟驅(qū)出錯(cuò)”提示
resume返回程序出錯(cuò)處,如果想只提示一次,那么用resumenext執(zhí)行下一句else
msgbox("無法找到此文件),"找不到"其他錯(cuò)誤
resumestop:轉(zhuǎn)向標(biāo)號(hào)為stop:語句
endif
stop:為空
endsub
還有一個(gè)屬性變量err.description,它顯示出錯(cuò)時(shí)的文字提示內(nèi)容。可直按用msgbox輸出到用
戶,注意:?jiǎn)为?dú)的resume語句返回出錯(cuò)的原程序語句,如果錯(cuò)誤一直存在,那么就一直顯
示,因此,有必要改為resumenext或在程序中采用如下技巧(出錯(cuò)提示三次后就越過錯(cuò)誤):
PrivateSubForm_Load()
Dima%在事件開頭聲明一個(gè)變量a
OnErrorGoToIxn:
Image1.Picture=LoadPicture("c:\")
ExitSub
Ixn:
Ifa<3Then如果少于三次就繼續(xù)提示
MsgBox(Err.Description),,"error"用msgbox函數(shù)輸出對(duì)話框
a=a+l用于記錄次數(shù)
Resume返回出錯(cuò)處
Else
resumenext返回出錯(cuò)下一條語句
EndIf
EndSub
訪問系統(tǒng)DLL庫:系統(tǒng)WINDOWS提供了三個(gè)DLL庫,它們的庫名為:USER32;
GDI32;
KERNEL32
要訪問DLL,先要給程序添加一個(gè)標(biāo)準(zhǔn)模塊,在標(biāo)準(zhǔn)模塊中聲明DLL過程。
PublicDeclaresub過程名lib"庫名"alias”別名"(參數(shù)表)或
PublicDeclarefunction函數(shù)名lib"庫名"alias"別名"(參數(shù)表)as返回值類型
例:PublicDeclareFunctionGetWindowsDirectoryALib"kemel32"(ByVaiIxnAsString,ByVai
IxmAsLong)AsLong真酷!連參數(shù)名也自定了。
說明:
其中,過程名或函數(shù)名可以自定,如果是自定的(不同于DLL庫中的名字),那么就必須在
Alias”別名"中寫出它在DLL庫中的全名;如果過程名或函數(shù)名就是DLL庫中的過程名,
則Alias"別名"可以省略。如上例若將API函數(shù)GetWindowsDirectoryA換成Idd,寫成:Public
DeclarefunctionIddlib"kemel32"alias"GetWindowsDirectoryA"_
(byvalIxnasstring,byvalIxmaslong)aslong
聲明了API函數(shù),它的調(diào)用與調(diào)用一般的VB函數(shù)沒區(qū)別。
參數(shù)表:聲明部分的"形參"有兩個(gè)值得注意的關(guān)健字:ByVaiflByRef
byval意為"值傳遞”,是將實(shí)參的值拷貝過來,API過程用的是“實(shí)參”的復(fù)制品,不會(huì)使原參
數(shù)產(chǎn)生變化。
byref意為“地址傳遞”,是將實(shí)參在內(nèi)存中的地址(指針)傳遞過來,如果在過程中改變了
該地址的內(nèi)容,那么會(huì)使原參數(shù)的內(nèi)容產(chǎn)生變化。
重大注意;字符串都是傳地址的。如果在形參聲明中用Byval,則傳遞字符串的首字符指針
(也就是地址),如果用BYREF,則傳遞指向字符串首字符指針的指針。
重大注意:在形參聲明中不注明byval和byref的情況下,缺省為byref,即指針傳遞。
在API訪問和參數(shù)類型聲明中,有一個(gè)很好的幫助工具,那就是API瀏覽器(在外接程序
管理器中),在其中查找所需API,并查找相應(yīng)類型聲明,然后用剪貼板復(fù)制到標(biāo)準(zhǔn)模塊的
聲明中,再自定義一個(gè)這種類型的變量,如:
PublicTypeMEMORYSTATUS數(shù)據(jù)類型聲明,從API游覽器中復(fù)制
dwLengthAsLong
dwMemoryLoadAsLong
dwTotalPhysAsLong
dwAvailPhysAsLong
dwTotalPageFileAsLong
dwAvailPageFileAsLong
dwTotalVirtualAsLong
dwAvailVirlualAsLong
EndType
PublicDeclareSubGlobalMemoryStatusLib"kerne132"_API聲明
(IpBufferAsMEMORYSTATUS)
PublicIxnAsMEMORYSTATUS定義一個(gè)這樣的變量,好在事件中調(diào)用時(shí)當(dāng)實(shí)參用。
調(diào)用API函數(shù)時(shí),格式如下:
CALL函數(shù)名或過程名(實(shí)參)
CallGlobalMemoryStatus(lxn)
如果實(shí)參是一個(gè)“結(jié)構(gòu)類型”,引用時(shí)就用”實(shí)參.分量”來表示每一項(xiàng)返回值,如:
MsgBox(Ixn.dwAvailPageFile),,"a"
MsgBox(lxn.dwAvailPhys),,nbn
MsgBox(Ixn.dwAvailVirtual),,ucn
MsgBox(Ixn.dwLength),,"dn
MsgBox(Ixn.dwTotalPageFile),,ne"
MsgBox(Ixn.dwMemoryLoad),,"f*
MsgBox(Ixn.dwTotalPhys),,ngM這些a,b,c,d,e是標(biāo)題條中隨便起的。
用VB在硬盤上創(chuàng)建一個(gè)文件夾:
Mkdir語句。格式:
Mkdir”路徑及文件夾名"
mkdir"c:\windows\desktop\李新寧"在桌面上創(chuàng)建個(gè)名為"李新寧"的文件夾
又如:PrivateSubCommand2_Click()
MkDir"c:\windows\desktop\mydir"
EndSub
如果缺省路徑,則為本VB程序的當(dāng)前路徑,如:mkdir"mydir”,在當(dāng)前目錄下創(chuàng)建一個(gè)文件
夾,名為mydir.
用VB刪除一個(gè)文件夾(空文件夾):RmDir語句,格式:
rmdir"路徑及文件夾名"
用法與上面類似,此不再說明.如果一個(gè)文件夾內(nèi)有文件,那么,要先用KILL語句刪除文件,
再用rmdir刪除文件夾。格式:
kin”路徑及文件名"
在路徑及文件名中,省略路徑則指當(dāng)前路徑,并可用通配符"*“和"?”來刪除多個(gè)文件,如:
killtxt",將當(dāng)前目錄下的所有文本文件全部刪除。注意:KILL語句刪除的文件不會(huì)放
入回收站。
在調(diào)用函數(shù)或過程時(shí),該函數(shù)或過程如果作為表達(dá)式,則其實(shí)參要括號(hào),如果調(diào)用時(shí)是作為
語句,實(shí)參則不要括號(hào)。下面兩句是等價(jià)的。
SetWindowTextAForml.hwnd,"API函數(shù)修改標(biāo)題欄文字”一函數(shù)語句
CallSetWindowTextA(Forml.hwnd,"API函數(shù)修改標(biāo)題欄文字”)-函數(shù)為表達(dá)式
API調(diào)用格式中的lib"庫名"有一點(diǎn)要注意,如果不是調(diào)用Windows\system文件夾下的DLL
庫,則要指明路徑名,如:
publicdeclarefunctionIxnsdlllib"d:\student\mydll.dll"(byvalaasinteger,byvalbasinteger)as
long
在程序中窗體的運(yùn)行位置是用一個(gè)叫做“窗體布局”的窗口來調(diào)整的,可否用另外的替代法,
而不用這個(gè)不精確的"窗體布局"窗口呢?
當(dāng)然可以,那就是在代碼中,例如要使窗體居于顯示器中央,有兩個(gè)新屬性變量,screen.width
和screen.height,分別表示本顯示器的屏幕寬度(screen.widlh)和顯示器高度(screen.height).
用屏幕寬度減去窗體F0RM1寬度再除以2,就可得到FORM的left左邊距了(也就是橫坐
標(biāo)吧),用屏幕高度減FORM1高度再除以2。就可得到FORM的top上邊距了(縱坐標(biāo)),
這樣便可居中,如下:
Form1.Left=(Screen.Width-Form1.Width)/2
Form1.Top=(Screen.Height-Form1.Height)/2
VB基本概念:對(duì)象-對(duì)象是具有某些特性的具體事物的抽象。
我在使用VB時(shí)遇到一個(gè)問題,我想用一個(gè)組框(frame1)將幾個(gè)按紐括在一起,可是當(dāng)組
框畫上去后卻會(huì)把按紐都覆蓋掉。按紐不見了(在framel圖層下面),怎么辦?什么辦法可
以決定幾個(gè)對(duì)象重合時(shí),哪個(gè)在上,哪個(gè)在下?辦法如下:1,選中要改變圖層前后的對(duì)象;
2,在“格式”菜單中“順序”菜單項(xiàng)中選“置前”(在上面)或“置后"(在下面)即可。另外,在
代碼中也可以,用zorder方法,格式:
對(duì)象名.zorderO或1(0為置前,1為置后)
frame1.zorder1
重點(diǎn)筆記:事件
在WINDOWS中最主要的事件就是鼠標(biāo)事件,特別是其中的click單擊事件,此外還有
dblclick事件:雙擊事件,用法與click一樣。
mousedown事件:鼠標(biāo)按下時(shí)發(fā)生,有一個(gè)值得注意的參數(shù)button,它返回按下鼠標(biāo)左鍵還
是鼠標(biāo)右鍵,采用ifbutton=vbleftbutton…代碼來寫。
mouseup事件:鼠標(biāo)先按下然后抬起時(shí)發(fā)生,用法與mousedown一樣。
mousemove事件:鼠標(biāo)經(jīng)過時(shí)發(fā)生。
第二類的事件就是鍵盤事件,這類事件的掌握要加強(qiáng)。一個(gè)控件得到焦點(diǎn)后,就可以觸發(fā)這
一類事件,有以下幾種:
keydown事件:按下鍵盤上某個(gè)健時(shí)發(fā)生。但鍵盤上鍵那么多,需要用它返回的keycode參
數(shù)來指明按了哪個(gè)鍵,例下:
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
IfKeyCode=vbKeyBThen
Print"你按下了字母B"
ElselfKeyCode=vbKeyFlThen
Print”你按下了Fl鍵”
EndIf
EndSub
注:在keycode參數(shù)中,主鍵盤上的數(shù)字鍵和數(shù)字小鍵盤上的數(shù)字鍵是不同的,主鍵盤上用
vbkey0-vbkey9表示,而小鍵盤上的鍵用vbkeyNumpadO-vbkeyNumpad9來表示。
keyup事件:松開按鍵時(shí)發(fā)生,與keydown事件用法一樣。
keypress事件:按下某個(gè)鍵接著松開這個(gè)鍵時(shí)發(fā)生。注意,它的參數(shù)與keydown及keyup不
同,它是采用字符ASCII碼的方式,即用一個(gè)叫Keyascii的參數(shù)名,可以區(qū)分大小寫,但
有些功能鍵不能用。
ifkeyascii=O到255的一個(gè)整數(shù)Ihen...來寫,例如:
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=120Then'120是小寫字母x的ASCII碼值
UnloadMe
ElseIfKeyAscii<48OrKeyAscii>57Then'數(shù)字鍵的ASCII碼在這個(gè)范圍內(nèi)
MsgBox("你輸入的不是數(shù)字)48
EndIf
EndSub
其他重要的事件有:
change事件:當(dāng)對(duì)象的內(nèi)容改變時(shí)發(fā)生。
gotlbcus事件:當(dāng)焦點(diǎn)從一個(gè)對(duì)象移動(dòng)到當(dāng)前對(duì)象時(shí),當(dāng)前對(duì)象發(fā)生gotfocus事件。
lostfocus事件:當(dāng)焦點(diǎn)從當(dāng)前對(duì)象移出時(shí),當(dāng)前對(duì)象會(huì)發(fā)生lostfocus事件。
★keydown事件和keypress事件有什么實(shí)際運(yùn)用上的差別?keydown多常用于功能鍵(如
F1),需要shift,Ctrl,Alt+字符鍵的"組合鍵",區(qū)分?jǐn)?shù)字小鍵盤和常規(guī)數(shù)字鍵等keypress所不
能的情況,keypress以ASCII碼來區(qū)分按鍵,側(cè)重"鍵的內(nèi)容",而keydown和keyup側(cè)重"
鍵的位置"。
我想在文本框中限制只能輸入數(shù)字,怎么辦最方便?可用keypress事件,如下:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii<48OrKeyAscii>57Then
KeyAscii=0等于0表示沒按鍵,它在textl對(duì)象text屬性接入字符前產(chǎn)生,因
Beep此可限制輸入。
EndIf
EndSub
集合(collection):用來存儲(chǔ)類似數(shù)組的一組同類變量,它與數(shù)組不同的是,集合是一種對(duì)象,
它不僅可通過索引值來訪問其中的元素,還可通過關(guān)健字來訪問其中元素。聲明格式:
DIM(或PUBLIC)集合名asnewcollection
dimIxnasnewcollection
既然集合是一個(gè)對(duì)象,就用方法和屬性去操作它,有三個(gè)方法和一個(gè)屬性:
ADD方法:添加元素到集合對(duì)象中;格式:
集合名.add元素內(nèi)容,關(guān)健字,添加到…前,添加到…后(添加位置)
Ixn.add23,“李新寧",,"李冬冬"
上例表示在集合中“李冬冬“關(guān)健字所對(duì)應(yīng)元素后面添加"李新寧"為關(guān)健字的元素23(我是想
表示年紀(jì))。
REMOVE方法:刪除一個(gè)元素;
集合名.remove"關(guān)健字或索引位置"
Ixn.remove"李新寧"或Ixn.remove5(如果元素"23"的索引號(hào)為5)
索引值是VB自動(dòng)給每個(gè)集合元素添加的,從第1個(gè)元素索引號(hào)為1開始。
ITEM方法:引用集合對(duì)象中的元素,可省略,格式:集合名.item(關(guān)健字)
省略為:集合名(關(guān)健字或索引位置)
x=lxn("李新寧”)x就等于23。
也可用索引位置,如x=lxn⑸(如果“李新寧"所對(duì)元素的索引為5),索引位置(其實(shí)就是
下標(biāo))最小從1開始。
COUNT屬性:返回集合中的元素個(gè)數(shù)。格式:集合名.count.如y=lxn.count,y就等于集合中
元素個(gè)數(shù)。
自定義過程:Private(或public,static)sub過程名(形參)
endsub
調(diào)用:Call過程名(實(shí)參)或過程名實(shí)參
自定義函數(shù):private(或public,static)function函數(shù)名(形參)as類型
函數(shù)名=值
endfunction
調(diào)用:函數(shù)名(實(shí)參)為一個(gè)確定值,
上面函數(shù)與過程區(qū)別是:函數(shù)一定有返回值,所以定義時(shí)要指明(返回值)類型,并在函數(shù)
過程中設(shè)定”函數(shù)名=值"來確定返回值。調(diào)用函數(shù)時(shí)如果也用CALL,則函數(shù)的返回值就失
去意義(這樣合是合法)。
★基本的類操作:類形象理解為“控件”即可,創(chuàng)建一個(gè)類,也
就是自己創(chuàng)建一個(gè)象工具箱中控件那樣的"新"控件。自己設(shè)置添加它的屬性,方法。只不過
自己發(fā)明的新控件沒有圖標(biāo),所有屬性,方法,事件只能在代碼中進(jìn)行而已。
類是用來創(chuàng)建對(duì)象實(shí)例的模板。
1,在“工程"菜單中選"添加類模塊"。在屬性窗口修改它的"(名稱)”屬性為想要的名字,這
個(gè)名字將作為這個(gè)類(為好理解,叫成"新控件")的名字。
2,制作新控件屬性:在類模塊中通用部分(此時(shí)全都是)用Public聲明一群變量,要指明
具體類型,這些所有變量就成了新控件的屬性。就這么簡(jiǎn)單。
3,制作新控件方法:在類模塊中建立新過程(用publicsub...endsub或publicfunction...end
function),這些過程名將作為新控件的方法名。在過程里編寫新控件功能的代碼。
4,編寫類模塊事件,類模塊事件只有initialize和terminate兩種。當(dāng)我們?cè)诔绦蛑杏谩毙驴?/p>
件"創(chuàng)建一個(gè)對(duì)象時(shí),在剛剛創(chuàng)建一剎那,觸發(fā)這里的initialize事件,這個(gè)事件可處理對(duì)象
實(shí)例創(chuàng)建時(shí)需要處理的初始化。
新控件的運(yùn)用:如何使用自己新做的"控件"呢?因?yàn)樗鼪]有在工具箱中的圖標(biāo),不可直按”
畫”到窗體上,而要完全在代碼中進(jìn)行。
1,在通用部分聲明一個(gè)對(duì)象變量,使它指向“新控件"。如DimIxnAsclassl
classl是我自定的“新控件”名。注意:此時(shí)只是聲明變量Ixn為對(duì)象變量,但并沒有具體代
表哪個(gè)對(duì)象,要用SET語句來確定對(duì)象變量的值。用set…new…新建類模塊對(duì)象。
2,在FORMLOAD事件中創(chuàng)建一個(gè)"新控件"的對(duì)象,用SET…NEW語句,
set對(duì)象變量=優(yōu)\¥新控件
setlxn=newclass1
這時(shí),對(duì)象變量名就成了創(chuàng)建的對(duì)象的名字(注:沒有NEW是普通的賦值,有NEW就是
新建對(duì)象)。
3,進(jìn)行對(duì)象可進(jìn)行的各種操作。如:lxn.condition=lrue
下面是自制一個(gè)“跑表”控件的例子。
A,類模塊中:
OptionExplicit
Publictimed]AsDate'這三個(gè)變量作為“跑表”類的屬性
PublicconditionAsBoolean'timectl為時(shí)間長(zhǎng)度,condition為計(jì)時(shí)/停止?fàn)顟B(tài)
PublicstarttimeAsDate'starttime為基準(zhǔn)時(shí)間
PublicSubstart。'開始計(jì)時(shí)方法
condition=True
starttime=Timestarttime賦值為系統(tǒng)時(shí)鐘的當(dāng)前時(shí)間
EndSub
PublicSubstoptime。'停止計(jì)時(shí).方法
DimIxnAsDate
condition=False
Ixn=Time-starttime時(shí)間差
timectl=timectl+Ixn進(jìn)行多次調(diào)用該過程時(shí)累積時(shí)間長(zhǎng)度
EndSub
PublicSubreset。'清0方法
condition=False
timectl=0
starttime=Time
EndSub
PrivateSubClass_Initialize()供新建實(shí)例時(shí)初始化
starttime=Time
timectl=Time-starttime
condition=False
EndSub
B,程序中:
DimmywatchAsmyclass聲明對(duì)象變量將指向myclass創(chuàng)建的實(shí)例
PrivateSubCommand1_Click()
Setmywatch=Newmyclass重新新建
Text1.Text=mywatch.timectl
EndSub
PrivateSubCommand2_Click()
SelectCasemywatch.condition
CaseFalse
mywatch.start
Text1.Text=uon”
CaseTrue
mywatch.stoptime
Text!.Text=mywatch.timectl
EndSelect
EndSub
PrivateSubForm_Load()
Setmywatch=Newmyclass新建對(duì)象
Text!.Text=mywatch.timectl
EndSub
★程序中的APP對(duì)象,它主要提供如本程序的標(biāo)題,版本信息,路徑等有時(shí)很必要的信息,
常用屬性有:
App.Title:返回本程序的標(biāo)題。
App.Path:返回本程序所在的路徑。與curdir不完全相同,curdir是指當(dāng)前路徑。如果1個(gè)程
序創(chuàng)建了快捷方式,則App.path和curdir就可能不同了。應(yīng)以App.path為準(zhǔn)。
App.EXEname:返回本程序不含擴(kuò)展名的根名
如何在VB中控制關(guān)機(jī)?除了以前講到的exitwindowsex函數(shù)外,還有一種更簡(jiǎn)單的方法,
只要在你需要的地方,比如按扭等等,在事件過程中加入
Shell"rundll32.exeuser.exe,exitwindows"就可以了。對(duì)WIN2000無效!
在VB中可打開控制面板,由用戶進(jìn)行設(shè)置,打開主面板:在事件過程中寫
x=Shell("rundll32.exeshell32.dll,Control_RunDLL",1)
也可打開各個(gè)具體項(xiàng)目,如
x=Shell("rundll32.exeshell32.dll,Control_RunDLLmmsys.cpl",1)
打開的是控制面板中"多媒體"項(xiàng)。而
x=Shell("rundll32.exeshell32.dll,Control_RunDLLaccess.cpl?5",1)
打開的是“輔助選項(xiàng)"項(xiàng)目。而
x=Shell("rundll32.exeshell32.dll,Control_RunDLLdesk.cpl,,2",1)顯示的是"顯示器”項(xiàng)目(中
的“外觀“選項(xiàng)卡,注:各個(gè)選項(xiàng)卡由尾部參數(shù)決定,這里是2)。
在文本輸入時(shí),我們可通過設(shè)置ASCII碼的chr(13)+chr(10)來使文本換行,而在VB程序中,
可用一個(gè)常數(shù)vbCrLf來代替這兩個(gè)ASCII碼表示換行,如:
textl.text="您如果需要的話"&chr(13)+chr(10)&"可以來找我"
可寫為:textl.text="您如果需要的話"&vbCrLf&"可以來找我"
關(guān)于在VB程序中用鍵盤的問題:1,很多控件運(yùn)行時(shí)的使用都可以采用在其caption屬性中
寫"&快捷鍵”的方式指定鍵盤訪問鍵(如菜單,按紐,復(fù)選框,選項(xiàng)按紐等等)2,TAB
鍵常用來對(duì)各對(duì)象間的切換。
3,設(shè)計(jì)時(shí)改變選定對(duì)象的大?。篠hift+方向鍵;
設(shè)計(jì)時(shí)改變選定對(duì)象的位置:Ctrl+方向鍵。
在標(biāo)準(zhǔn)模塊中不能編寫某個(gè)窗體中
的對(duì)象的事件過程,事件過程只能在窗體模塊中編寫。
VB代碼窗口中的書簽:書簽可用來標(biāo)記代碼中的某些行,以便以后可以很容易地返回這些
行,書簽的切換或定位可在"編輯"菜單”書簽”項(xiàng)中進(jìn)行。
VB代碼一行一般寫一條語句,也可一行寫多條語句,每條語句間用冒號(hào):隔開即可
VB一條長(zhǎng)語句可以分成幾行來寫,在需要分行的地方用"空格+下劃線(_)”即可。
在VB中我們一般用十進(jìn)制數(shù),但有時(shí)用十六進(jìn)制數(shù)或八進(jìn)制數(shù)更方便,怎樣表示16進(jìn)制
數(shù)呢:用前綴&H,怎樣表示八進(jìn)制數(shù)呢,用前綴&0(&號(hào)和大寫字母0或數(shù)字0),如:
255=&o377=&hFF
我們可看到用16進(jìn)制數(shù)表示的控件顏色值如:labell.backcolor=&HFF0000(藍(lán)色),通常情況
下,顏色值由六位數(shù)組成,顏色值=&Hbbggrr。前兩位數(shù)表示藍(lán)色成分,中間兩位表示綠色
成分,后面兩位表示紅色成分,范圍從16進(jìn)制數(shù)的0-FF。
在多個(gè)模塊中有同名的公用變量(用public聲明的)時(shí),引用時(shí)應(yīng)分別指出它的出處,形如:
modulel.lxn或module2.1xn或forml.lxn等。如果有同名的公用過程或公用函數(shù)等也是如此,
引用時(shí)指明出處。
變體類型數(shù)據(jù)的三個(gè)特殊值:EMPTY,NULL,ERRORo
當(dāng)一個(gè)變體變量未賦值時(shí),其"值"就等于Empty.它不等于0或空字符串當(dāng)給一個(gè)變量賦
值后(如lxn=0),其empty值就消失,可重新賦予empty值,如:lxn=empty
可用IsEmpty函數(shù)檢測(cè)是否為empty值:ifIsEmpty(lxn)=truethenlxn=0
給一個(gè)變體變量賦予NULL值:常用于數(shù)據(jù)庫程序中表示未知數(shù)據(jù)或丟失的數(shù)據(jù),null的傳
播性:假如有一個(gè)變量值為NULL,將它放入一個(gè)表達(dá)式中,整個(gè)表達(dá)式值將變?yōu)镹ULL,
將它作為參數(shù)傳入函數(shù)中,函數(shù)將返回NULL,NULL能通過表達(dá)式"傳播",當(dāng)然前提是有
"變體"變量(為傳播載體)的基礎(chǔ)上。用IsNull函數(shù)檢測(cè)是否為NULL值,
如:ifIsNull(lxn)=falsethenlxn=Null
變體變量的ERROR值,指出己發(fā)生的過程中的錯(cuò)誤狀態(tài)。不是指程序錯(cuò)誤(我沒看懂)
在動(dòng)態(tài)數(shù)組的使用中,用redim確定了數(shù)組的最大下標(biāo),如果還要改動(dòng)這個(gè)值,而程序中若
重復(fù)執(zhí)行ReDim語句時(shí),當(dāng)前存儲(chǔ)在數(shù)組中的值都會(huì)全部丟失,VB重新將所有數(shù)組元素
初始化,運(yùn)行中怎樣改變數(shù)組的大小而又不丟失數(shù)據(jù)呢?用ReDimPreserve關(guān)健字,但要
注意,運(yùn)行中只能改變數(shù)組最后一維的大小,可先用UBound函數(shù)取得數(shù)組
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)工招募:2024學(xué)校勤雜工勞動(dòng)協(xié)議
- 2025年數(shù)據(jù)中心場(chǎng)承包運(yùn)營(yíng)管理協(xié)議4篇
- 專項(xiàng)龍門吊租賃協(xié)議格式范本2024版B版
- 2025年度健身中心場(chǎng)地租賃及私人教練服務(wù)合同4篇
- 二零二四商鋪?zhàn)赓U合同(含租賃期間租賃物處置及變現(xiàn)條款)3篇
- 2025不銹鋼精密鑄造件加工與銷售合作協(xié)議2篇
- 2025年度文化衍生品研發(fā)、生產(chǎn)及銷售合作協(xié)議4篇
- 二零二五年度餐飲業(yè)人力資源外包合同6篇
- 2024藥店負(fù)責(zé)人任期藥店經(jīng)營(yíng)數(shù)據(jù)統(tǒng)計(jì)與分析聘用合同3篇
- 一次性付款房地產(chǎn)轉(zhuǎn)讓合同(2024年版)
- NGS二代測(cè)序培訓(xùn)
- 《材料合成與制備技術(shù)》課程教學(xué)大綱(材料化學(xué)專業(yè))
- 小紅書食用農(nóng)產(chǎn)品承諾書示例
- 釘釘OA辦公系統(tǒng)操作流程培訓(xùn)
- 新生兒科年度護(hù)理質(zhì)控總結(jié)
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 《工貿(mào)企業(yè)有限空間作業(yè)安全規(guī)定》知識(shí)培訓(xùn)
- 高層次人才座談會(huì)發(fā)言稿
- 垃圾清運(yùn)公司管理制度(人員、車輛、質(zhì)量監(jiān)督、會(huì)計(jì)管理制度)
- 《建筑工程設(shè)計(jì)文件編制深度規(guī)定》(2022年版)
- 營(yíng)銷人員薪酬考核方案
評(píng)論
0/150
提交評(píng)論