vb中怎样让text文本框自动忽略一些特定字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb中怎样让text文本框自动忽略一些特定字符?相关的知识,希望对你有一定的参考价值。

比如@、''、*等字符,怎么让vb的textbox自动忽略它们呢?就是不管键盘输入、复制粘贴,还是其他什么方式,都不能让这些字符进入textbox中。自动把它们排除在外。
vb窗体上有combo1、combo2、command1、text1。用下面的代码保存文件时,在combo1或combo2中输入一些字符如:"、*等时造成保存失败,代码提示出错。怎么修改代码、忽略这些文件名不支持的字符,避免这种情况,以便成功保存?最后保存的文件名中可以不用那些不支持的字符,或代之以其他字符,比如将"代替为“。
Private Sub Command1_Click()
Open "c:\" & "\" & Combo2.Text & "班(" & Combo1.Text & ")组.txt" For Append As #1
Print #1, Text1.Text
Close #1
End Sub

'因为combo1或combo2的内容是系统生成的。已经知道的文件名不支持的字符:\ / : * ? " < > →

参考技术A 利用:KeyAscii = 0来屏蔽输入的某一些键值,对TextBox和comBox都可以做到,什么意思呢?
就是在对TextBox和comBox输入按键时,就不接收一些特殊的键盘.
第一步:编写代码
Private Sub Combo1_KeyPress(KeyAscii As Integer)
MsgBox KeyAscii
End Sub
测试该代码,输入@键,发现其KeyAscii为64
好了,现在把代码改为如下:
Private Sub Combo1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 64 Then
   KeyAscii = 0
  End If
End Sub
你再试试,发现这个组合框不接收@键的输入了.
问题OK了!你要禁止其它什么键,道理一样.

这样比你输入后再去处理,要容易一些.
当然,你也可以在输入时做一些适当的提示等等.追问

你的方法 提供了一种解决的办法。但我想不管理什么情况下,那些特殊字符都不进输入框。就是不管理按键输入、复制粘贴、拖动文字等。

追答

要么是禁止鼠标拖入和复制粘贴,规定只能键盘输入.
要么就在文本框的Change()事件里,用楼上的朋友介绍的方法做后期处理了。判断若有不允许的字符,就不执行接下来的操作,并作相应提示:

参考技术B 将输入的内容分解开单个字符,(for ... next语句, mid 语句)
用case......select语句中将其中等于你提到的字符用""(空字符)代替,
然后重新连接起来,即可。
参考技术C private sub text1_change
text1.text=replace(text1.text,"@","")
text1.text=replace(text1.text,"、","")
text1.text=replace(text1.text,"*","")
end sub

把上面代码里的text1改成combo1本回答被提问者采纳

vb中,如何限制输入的文本框的内容只能是数字数或者字母?

比如我我限制某一文本框里面输入的内容只能是数(可以是小数),请问如何实现呢?如果限制只能输入整数,请问如何实现呢?如果限制只能输入字母请问如何实现呢?

参考技术A Private Sub Text1_Change()'有点懒
If IsNumeric(Text1) = False Then
MsgBox "不是数字,请输入数字", 0, "提示"
Text1.SetFocus
Text1.SelStart = Len(Text1)
SendKeys "BACKSPACE"
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) Like "[a-zA-Z]" = False Then
MsgBox "不是字母,请输入字母", 0, "提示"
KeyAscii = 0
End If
End Sub
Private Sub Text3_Change()
If IsNumeric(Text3) = False Then
MsgBox "不是数字,请输入数字", 0, "提示"
Text3.SetFocus
Text3.SelStart = Len(Text3)
SendKeys "BACKSPACE"
ElseIf Val(Text3) - CLng(Text3) <> 0 Then'有点懒
MsgBox "不是整数,请输入整数", 0, "提示"
End If
End Sub追问

sendkeysbackspace 是什么意思呢?

追答

退格(删除。看你键盘上的名称,应该是一样)。主要针对键盘操作。不然就如推荐答案,只是简单的理论操作。否则会有漏洞或叫不完善。

本回答被提问者采纳
参考技术B Dim 输入限制 As String = "0123456789.abcdefghijklmnopqrstuvwxyz"
Dim 输入字符 As Char = e.KeyChar
If InStr(输入限制, 输入字符) <> 0 Or e.KeyChar = ChrW(8) Then
If 输入字符 = "." And InStr(TextBox1.Text, 输入字符) <> 0 Then
e.Handled = True
Else
e.Handled = False
End If
End If
这段代码写在文本框的 KeyPress 事件里,.NET 的,6.0 好像类似,但没有 e.Handled = True 或者 False,这里为 True 时改成直接退出过程“Exit Sub”,False 不写了好像行,没有 6.0 没法给你试试
参考技术C 这个需要在文本框的keypress事件中对输入的keyascii进行检查, 如果不满足要求则输入无效,例如只能输入字母程式如下:
private sub Text1_keypress(KeyAscii as Integer)
select case keyascii
case 65 to 90,97 to 122 'A-Z, a-z

case else
Keyascii=0
end select
end sub
参考技术D 只能输入数字
Private Sub Form_Resize()
If Not IsNumeric(Text1.Text) Then
'如果输入的不是数字,删除非数字
Text1.Text = Val(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End If
End Sub
Private Sub Text1_Change()
If Not IsNumeric(Text1.Text) Then
'如果输入的不是数字,删除非数字
Text1.Text = Val(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End If
End Sub

只能输入整数
Private Sub Form_Resize()
tmp = ""
For n = 1 To Len(Text1.Text)
If Asc(Mid(Text1.Text, n, 1)) > 47 And Asc(Mid(Text1.Text, n, 1)) < 58 Then
tmp = tmp & Mid(Text1.Text, n, 1)
End If
Next
Text1.Text = Val(tmp)
Text1.SelStart = Len(Text1.Text)

End Sub
Private Sub Text1_Change()
tmp = ""
For n = 1 To Len(Text1.Text)
If Asc(Mid(Text1.Text, n, 1)) > 47 And Asc(Mid(Text1.Text, n, 1)) < 58 Then
tmp = tmp & Mid(Text1.Text, n, 1)
End If
Next
Text1.Text = Val(tmp)
Text1.SelStart = Len(Text1.Text)
End Sub

只输入字母
Private Sub Text1_Change()
'65 97 90 122
tmp = ""
For n = 1 To Len(Text1.Text)
If (Asc(Mid(Text1.Text, n, 1)) > 64 And Asc(Mid(Text1.Text, n, 1)) < 91) Or (Asc(Mid(Text1.Text, n, 1)) > 96 And Asc(Mid(Text1.Text, n, 1)) < 123) Then
tmp = tmp & Mid(Text1.Text, n, 1)
End If
Next
Text1.Text = tmp
Text1.SelStart = Len(Text1.Text)
End Sub
第5个回答  2013-02-08 '*********************************************************************************************
'名称 Sub_CheckNum
'作者   Morn Woo
'功能 检查键入的是否是数字 ,不是则释放按键
'参数 iPressKey(引用传递):按键的ASCII码;如果要处理浮点数的输入,则要把已经输入的部分作为参数sstr 传入
'应用方法 在keypress事件中调用,用事件的KeyAscii参数作为这里的参数iPressKey
'*********************************************************************************************
Sub Sub_CheckNum(ByRef iPressKey As Integer, Optional sStr = "")
sStr = Trim(sStr)
If Len(sStr) = 0 Then
'1处理自然数输入的情况
Select Case iPressKey
Case 48 To 57, 8, 13 '8是backspace,131enter
'处理数字字符问题
Case Else:: iPressKey = 0
End Select
Else
'2处理浮点数输入的情况
Select Case iPressKey
Case 45 '处理负号字符问题
If InStr(sStr, "-") > 0 Then: iPressKey = 0
Case 48 To 57, 8, 13 '处理数字字符问题
Case 44: If sStr = "" Then iPressKey = 0 '处理逗号字符问题
Case 46 '处理小数点字符问题
If InStr(sStr, ".") > 0 Then: iPressKey = 0
Case Else:: iPressKey = 0
End Select
End If
End Sub

以上是关于vb中怎样让text文本框自动忽略一些特定字符?的主要内容,如果未能解决你的问题,请参考以下文章

vb 怎样打开文件并把文件内容显示在文本框

JavaScript 中怎样判断文本框只能输出英文字母、汉字和数字,不能输入特殊字符!

在vb中如何一次性地将文件内容读取到文本框

vb中怎样使记事本中的内容显示在文本框中

VB。如何把 TEXT 文本框中选中的字体 变成想要的颜色

vb读取txt内容到vb文本框中