了解對象的類型
如果你想知道一個對象是否是特殊的類型,請編寫下面的代碼:
If TypeOf obj Is ListItem Then ...
如果想得到對象類型的名字,使用:
MsgBox "The item is a " & TypeName(obj)
控制長時間的循環(huán)
當(dāng)程序陷入一個很長時間的循環(huán)中時,你就不可能點擊任何一個命令按鈕或者按鍵。這樣對于用戶來說,就很不好控制。或許用戶不想再執(zhí)行循環(huán),通過點擊Cancel按鈕退出呢?怎么解決這個問題?答案是:使用DoEvents命令!就是說,在循環(huán)的開始執(zhí)行DoEvents命令,就象下面的代碼一樣:
Dim i As Long
For i = 1 To 1000000
DoEvents
...
Next i
實際上,DoEvents命令并不需要放置在第1行,將它放在循環(huán)中的任何地方都可以。這樣做后,程序的其他部分,比如一個結(jié)束循環(huán)的命令按鈕,就又機會接受點擊事件了。
使長循環(huán)運行更快
我發(fā)現(xiàn),一般情況下,使用API函數(shù)GetInputState來檢查程序輸入隊列的數(shù)值是較好的。我不知道為什么If語句提高了代碼運行速度,但實際上確實是工作得很好。
因此,可以將下面的代碼行
DoEvents
替換為
If GetInputState() Then DoEvents
試一試吧!
其實,這里面的原因在于:DoEvents語句允許任何應(yīng)用程序執(zhí)行相關(guān)事件,而不僅僅是你自己的程序。加入了GetInputState的判斷后,就只接受你自己的程序的事件動作了!
讓Select Case更簡單
讓我們看看下面的例子:通過用戶點擊不同組合的標簽,建立一個字符串:
lbl(0) = "Hello "
lbl(1) = " I注釋:m "
lbl(2) = " Happy"
lbl(3) = " Sad"
...
sub lbl_click (index as integer)
string$ = string$+lbl(index).caption
然后,你就必須要編寫一系列的select case語句來分析這個字符串 ...
select case string$
case "Hello I注釋:m Happy"
do something
case "Hello I注釋:m"
this would be an error...
case else
do something else
end select
可以看出,這將非常得復(fù)雜,特別是又許多標簽而且需要合并操作的合法檢查時。
為了解決這個難題,我創(chuàng)建了一個數(shù)組,它與標簽的數(shù)目等長:
arraylbl(n) as integer
數(shù)組起始數(shù)值為1,然后每個項目的值等于前一個的值乘以2(value*2),就象這樣:1 2 4 8 16 32 64 ... 這樣,每一對標簽的組合都會又一個的數(shù)值“
lbl(0) + lbl(1) = 1 + 2 = 3
lbl(0) + lbl(1) + lbl(4) = 1 + 2 + 16 = 19
現(xiàn)在,當(dāng)點擊一個標簽時,將它對應(yīng)的lblarray()數(shù)值添加進變量中。這樣,基于幾個數(shù)字,就可以簡單地編寫select case語句了:
select case IsLegal
case 3
注釋: the string was valid
call goodstuff
case 19
注釋:the string was valid
call goodstuff
如果你想知道一個對象是否是特殊的類型,請編寫下面的代碼:
If TypeOf obj Is ListItem Then ...
如果想得到對象類型的名字,使用:
MsgBox "The item is a " & TypeName(obj)
控制長時間的循環(huán)
當(dāng)程序陷入一個很長時間的循環(huán)中時,你就不可能點擊任何一個命令按鈕或者按鍵。這樣對于用戶來說,就很不好控制。或許用戶不想再執(zhí)行循環(huán),通過點擊Cancel按鈕退出呢?怎么解決這個問題?答案是:使用DoEvents命令!就是說,在循環(huán)的開始執(zhí)行DoEvents命令,就象下面的代碼一樣:
Dim i As Long
For i = 1 To 1000000
DoEvents
...
Next i
實際上,DoEvents命令并不需要放置在第1行,將它放在循環(huán)中的任何地方都可以。這樣做后,程序的其他部分,比如一個結(jié)束循環(huán)的命令按鈕,就又機會接受點擊事件了。
使長循環(huán)運行更快
我發(fā)現(xiàn),一般情況下,使用API函數(shù)GetInputState來檢查程序輸入隊列的數(shù)值是較好的。我不知道為什么If語句提高了代碼運行速度,但實際上確實是工作得很好。
因此,可以將下面的代碼行
DoEvents
替換為
If GetInputState() Then DoEvents
試一試吧!
其實,這里面的原因在于:DoEvents語句允許任何應(yīng)用程序執(zhí)行相關(guān)事件,而不僅僅是你自己的程序。加入了GetInputState的判斷后,就只接受你自己的程序的事件動作了!
讓Select Case更簡單
讓我們看看下面的例子:通過用戶點擊不同組合的標簽,建立一個字符串:
lbl(0) = "Hello "
lbl(1) = " I注釋:m "
lbl(2) = " Happy"
lbl(3) = " Sad"
...
sub lbl_click (index as integer)
string$ = string$+lbl(index).caption
然后,你就必須要編寫一系列的select case語句來分析這個字符串 ...
select case string$
case "Hello I注釋:m Happy"
do something
case "Hello I注釋:m"
this would be an error...
case else
do something else
end select
可以看出,這將非常得復(fù)雜,特別是又許多標簽而且需要合并操作的合法檢查時。
為了解決這個難題,我創(chuàng)建了一個數(shù)組,它與標簽的數(shù)目等長:
arraylbl(n) as integer
數(shù)組起始數(shù)值為1,然后每個項目的值等于前一個的值乘以2(value*2),就象這樣:1 2 4 8 16 32 64 ... 這樣,每一對標簽的組合都會又一個的數(shù)值“
lbl(0) + lbl(1) = 1 + 2 = 3
lbl(0) + lbl(1) + lbl(4) = 1 + 2 + 16 = 19
現(xiàn)在,當(dāng)點擊一個標簽時,將它對應(yīng)的lblarray()數(shù)值添加進變量中。這樣,基于幾個數(shù)字,就可以簡單地編寫select case語句了:
select case IsLegal
case 3
注釋: the string was valid
call goodstuff
case 19
注釋:the string was valid
call goodstuff