VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB问题全功略(6)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10099, 日期:2002-01-26
VB问题全功略(6)

26、如何快速设定 Form 上所有控制项的 TabIndex 顺序
27、Boolean 值的转换
28、呼叫子程序(Subroutine)
29、输入时,自动转换成大写?
30、输入时,自动转换成小写?
26、如何快速设定 Form 上所有控制项的 TabIndex 顺序

由于在设计 Form 上的控制项时,不一定会依照输入的顺序,在完成设计之后,我们通常会重设各控制项的 TabIndex 顺序,当 Form 上的控制项比较多时,设定起来相当麻烦,常常还会设错。

有一个很简单又不容易出错的方法,是从画面上的右下角往左上角 (方向是先向左再往上),逐一的将控制项的 TabIndex 属性设成 0。
1:右手用滑鼠点一下右下角的控制项,左手按 F4,将 TabIndex 设成 0。
2:右手往左用滑鼠点一下倒数第二个控制项,左手按 F4,左手按 0。
3:右手往左用滑鼠点一下倒数第三个控制项,左手按 F4,左手按 0。
4:重复以上动作直到左上角第一个控制项为止。

好了,您已经设定好整个 Form 上所有控制项的 TabIndex 顺序了!其原理就是当您设定一个控制项的 TabIndex 为 0 时,原来 TabIndex 为 0 的控制项,TabIndex 就变成了 1、而 1 的变成 2...依序 +1 改变。

27、Boolean 值的转换

我们都知道 Boolean 这个资料形态只有 True/False 二种值,但是当我们要存到资料库时,我们常常会将它转成数值,您可以直接设定 True=-1 / False =0,若您必须使用函数转换,很可能会用 Val(),但是小心,其结果是错的!

您必须使用 Abs() 或 CInt(),为什么呢?看结果就知道了!

Val(True) 结果是 0

CInt(True) 结果是 -1

Abs(True) 结果是 1

28、呼叫子程序(Subroutine)

当我们呼叫子程序 (Subroutine) 时,有二种方法:
1、Call MyRoutine(参数)
2、MyRoutine 参数

注意第二个方法不可以使用括号 (),否则 VB 会误认为是运算子,本来应该是传址 (Reference),就会变成了传值 (Value)!看看以下的例子就知道了:

Call MyRoutine(Text1) 正确

意思是要将 Text1 这个控制项传入 MyRoutine 中,但是如果拿掉 Call 这个字,VB 传给 MyRoutine 的却变成了 Text1 的内含值了!也就是 Text1.text。

MyRoutine(Text1) 错误

MyRoutine 要的本来是一个控制项,结果却传入了一个字串,您会得到一个《type-mismatch / 资料型态不符》

29、输入时,自动转换成大写?

要自动转换大小写,很多人首先想到的一定是 UCase$ 及 LCase$,但是要使用这二个函数,一定不可以在 Key_Press 事件中使用,否则您若输入《abc》,结果却变成《CBA》,为什么呢?

因为当您输入 a 之后,UCase$ 会替您转换成 A,但是转换完后,滑鼠的游标会停在 A 的前面,您继续输入 b,变成了 bA,UCase$ 又替您转换成 BA,转换完后,滑鼠的游标又停在 BA 的前面,您继续输入 c,变成了 cBA,UCase$ 又替您转换成 CBA! 若您不相信,可以自己试试 

在 Key_Press 中正确的作法,是判断它的参数 KeyAscii !a 的 Asc 值是 97,A 的 Asc 值是 65,所以要自动将小写转成大写,写法如下:

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii >= 97 And KeyAscii <= 122 Then
KeyAscii = KeyAscii - 32
End If

30、输入时,自动转换成小写?

要自动转换大小写,很多人首先想到的一定是 UCase$ 及 LCase$,但是要使用这二个函数,一定不可以在 Key_Press 事件中使用,否则您若输入《ABC》,结果却变成《cba》,为什么呢?

因为当您输入 A 之后,LCase$ 会替您转换成 a,但是转换完后,滑鼠的游标会停在 a 的前面,您继续输入 B,变成了 Ba,LCase$ 又替您转换成 ba,转换完后,滑鼠的游标又停在 ba 的前面,您继续输入 C,变成了 Cba,LCase$ 又替您转换成 cba! 若您不相信,可以自己试试 

在 Key_Press 中正确的作法,是判断它的参数 KeyAscii !a 的 Asc 值是 97,A 的 Asc 值是 65,所以要自动将大写转成小写,写法如下:

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii >= 65 And KeyAscii <= 90 Then
KeyAscii = KeyAscii + 32
End If