VBGood网站全文搜索 Google

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

51、我希望 TextBox 中能不接受某些特定字符,例如 注释:@#$%",有没有简单一点的写法?
52、如何让鼠标进入 TextBox 时自动选定 TextBox 中之整串文字?
53、如何让 TextBox 由 Insert 模式变成 Overwrite 模式?
54、如何使 TextBox 变成只读,卷动杆可卷动,但是不出现游标,也不可被选定反白?
55、文字框可以设定快捷键吗?
51、我希望 TextBox 中能不接受某些特定字符,例如 注释:@#$%",有没有简单一点的写法?

方法有好几种, 以下列举二种:

方法1: 可以使用 IF 或 Select Case 一个个判断, 但如果不接受的字符多时, 较麻烦!
方法2: 将要剔除的字符统统放在一个字串中,只要一个 IF 判断即可 !! 如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim sTemplate As String
    sTemplate = "!@#$%^&*()_+-="   注释:用来存放不接受的字符
    If InStr(1, sTemplate, Chr(KeyAscii)) > 0 Then
        KeyAscii = 0
    End If
End Sub


52、如何让鼠标进入 TextBox 时自动选定 TextBox 中之整串文字?

这个自动选定反白整串文字的动作,会使得输入的资料完全取代之前在 TextBox 中的所有字符。

Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End Sub

53、如何让 TextBox 由 Insert 模式变成 Overwrite 模式?

Windows 的 TextBox 一直都只支援 Insert Mode,而不支援 OverStrike(OverWrite) Mode,其实,只要在 Key_Press 事件中加上几行指令,就可以做到 OverStrike 功能 !!

以下的程式码中,只设定 SelLength=1,而 SelStart 若未指定则会一直跟著滑鼠的游标所在处,设定 SelLength=1 会反白游标所在处的下一个字,但是由于您输入的字元会直接取代该反白的字元(都同时在 Key_Press 发生),所以您并不会看到字符被选定反白 (Marked),若是游标已在字串的最后面,则会直接忽略这个动作。

以下的程式码中同时也作了以下的错误判断及预防:
1. 当输入的是退格符,也就是 Backspace (character 8)。
2. 当输入的是 return 键 (character 13)。
3. 事先已作了选定动作 (Marked)。

Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii <> 8 And KeyAscii <> 13 And Text1.SelLength = 0 Then
Text1.SelLength = 1
End If
End Sub

54、如何使 TextBox 变成只读,卷动杆可卷动,但是不出现游标,也不可被选定反白?

在 Form 中放一个 TextBox,设定 Locked = True,MultiLine = True,ScrollBar = 2 - Vertical。另外再放一个 CommandButton (或其他任何可接受 Focus 的物件),此物件可由您自行作其他用途,否则设定 Command1.left = -1000 将其移到 Form 的外面。

程式码如下:
Private Sub Text1_GotFocus()
注释:马上将 Text1 的 focus 转移到 Command1 或其他物件上
Command1.SetFocus
End Sub

55、文字框可以设定快捷键吗?

不行,要设定快捷键的先决条件,是该物件必须有 Caption 属性,但是 TextBox (文字框) 只有 Text 属性,并无 Caption 属性,所以文字框本身是不能设定快捷键的!完全没办法吗?

但是还是有办法的!人家说山不转路转,文字框本身不能设定快捷键,一般我们在文字框的左方都会放置说明用的 Label,那我们就借用 Label 来做到这个功能,作法如下:
1、将文字框的 TabIndex 设成说明用的 Label 物件的下一个。
2、设定 Label 物件的快捷键,奇怪吗?Label 物件没有 Focus 好像不要快捷键!没错,我们就是要利用 Label 物件不要快捷键的特性来达到我们的要求!

当您输入了 Label 物件的快捷键,由于 Label 物件没有 Focus 不接受快捷键,于是它立刻将 Focus 送到下一个 TabIndex 的物件,也就是 TextBox 文字框了!