./pr11.htm#51 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 文字框了! |