VB編程步步高-代碼效率篇
2019-11-18 17:42:45
供稿:網友
了解對象的類型
如果你想知道一個對象是否是特殊的類型,請編寫下面的代碼:
IfTypeOfobjIsListItemThen...
如果想得到對象類型的名字,使用:
MsgBox"Theitemisa"&TypeName(obj)
控制長時間的循環
當程序陷入一個很長時間的循環中時,你就不可能點擊任何一個命令按鈕或者按鍵。這樣對于用戶來說,就很不好控制?;蛟S用戶不想再執行循環,通過點擊Cancel按鈕退出呢?怎么解決這個問題?答案是:使用DoEvents命令!就是說,在循環的開始執行DoEvents命令,就象下面的代碼一樣:
DimiAsLong
Fori=1To1000000
DoEvents
...
Nexti
實際上,DoEvents命令并不需要放置在第1行,將它放在循環中的任何地方都可以。這樣做后,程序的其他部分,比如一個結束循環的命令按鈕,就又機會接受點擊事件了。
使長循環運行更快
我發現,一般情況下,使用API函數GetInputState來檢查程序輸入隊列的數值是較好的。我不知道為什么If語句提高了代碼運行速度,但實際上確實是工作得很好。
因此,可以將下面的代碼行
DoEvents
替換為
IfGetInputState()ThenDoEvents
試一試吧!
其實,這里面的原因在于:DoEvents語句允許任何應用程序執行相關事件,而不僅僅是你自己的程序。加入了GetInputState的判斷后,就只接受你自己的程序的事件動作了!
讓SelectCase更簡單
讓我們看看下面的例子:通過用戶點擊不同組合的標簽,建立一個字符串:
lbl(0)="Hello"
lbl(1)="I注釋:m"
lbl(2)="Happy"
lbl(3)="Sad"
...
sublbl_click(indexasinteger)
string$=string$ lbl(index).caption
然后,你就必須要編寫一系列的selectcase語句來分析這個字符串...
selectcasestring$
case"HelloI注釋:mHappy"
dosomething
case"HelloI注釋:m"
thiswouldbeanerror...
caseelse
dosomethingelse
endselect
可以看出,這將非常得復雜,特別是又許多標簽而且需要合并操作的合法檢查時。
為了解決這個難題,我創建了一個數組,它與標簽的數目等長:
arraylbl(n)asinteger
數組起始數值為1,然后每個項目的值等于前一個的值乘以2(value*2),就象這樣:1248163264...這樣,每一對標簽的組合都會又一個唯一的數值“
lbl(0) lbl(1)=1 2=3
lbl(0) lbl(1) lbl(4)=1 2 16=19
現在,當點擊一個標簽時,將它對應的lblarray()數值添加進變量中。這樣,基于幾個數字,就可以簡單地編寫selectcase語句了:
selectcaseIsLegal
case3
注釋:thestringwasvalid
callgoodstuff
case19
注釋:thestringwasvalid
callgoodstuff
caseelse
注釋:invalid
callnogood
endselect
呵呵,有時候,將字符進行數字化,能起到意想不到的好效果!->