当前位置:主页   - 电脑 - 程序设计 - VB
VB编程步步高-代码效率篇
来源:网络转载   作者:未知   更新时间:2008-12-16
收藏此页】    【字号    】    【打印】    【关闭
了解对象的类型

  如果你想知道一个对象是否是特殊的类型,请编写下面的代码:

  IfTypeOfobjIsListItemThen...

  如果想得到对象类型的名字,使用:

  MsgBox"Theitemisa"&TypeName(obj)

  控制长时间的循环

  当程序陷入一个很长时间的循环中时,你就不可能点击任何一个命令按钮或者按键。这样对于用户来说,就很不好控制。或许用户不想再执行循环,通过点击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

  呵呵,有时候,将字符进行数字化,能起到意想不到的好效果!->


其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明