我在VB中有一个文本框,设置为只接受数字数据,除两种特定情况外,它都有效。
如果用户提供非数字字符,文本框会自行清除,
但是,如果用户首先提供号码,则提供“ - ”或“+”
文本框将接受此作为有效输入。
当用户再输入一个任意类型的字符,即数字或字符
时然后文本框'实现'并且将自我清除。
我想知道这是否是由于VB存储字符' - '和'+'的方式?
最好的解决方法是加入两个例外,即输入“ - ”或“+”然后自我清除?
或者是否有更优雅的解决方案?
谢谢。
代码:
Private Sub TextBox1_Change()
'Textval used as variable from user input
'Numval becomes textval providing the user input is numerical
Dim textval As String
Dim numval As String
textval = TextBox1.Text
If IsNumeric(textval) Then
numval = textval
Else
TextBox1.Text = CStr(numval)
End If
End Sub
答案 0 :(得分:0)
代码vb.net:
If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then
' your code here
e.Handled = True
结束如果
你可以替换文字: 代码:
Text = Text.Replace("string", "replace_by_this_string")
答案 1 :(得分:0)
如果程序要求用户只在文本框中键入数字数据,则应在用户按下某个键时强制执行该限制
使用文本框的KeyDown
事件:
'Omitting the parameters and Handles keyword
Private Sub textbox_KeyDown()
'Set the keys you would want to allow in this array
Dim allowedkeys As Keys() = {Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0, Keys.Back}
For i = 0 To allowedkeys.Length - 1 'Iterate through the allowed keys array
If e.KeyCode = allowedkeys(i) Then 'If the key pressed is present in the array...
Exit Sub 'The check returned a success. Exit and accept the key
End If
Next
e.SuppressKeyPress = True 'Supress all keys that failed the check
End Sub
不要忘记添加您需要的更多密钥! Space键,小键盘键,点(点)键?
这样您就可以移除Changed
事件中的支票,直接转到numval = textval
或者对于那些懒惰的程序员,numval = TextBox1.Text
和numval = Val(TextBox1.Text)
也可以使用
答案 2 :(得分:-2)
您需要尝试解析输入以仅允许您想要的内容。如果解析成功,则单独留下该字段,否则将从控件中删除该文本...
Private Sub TextBox1_Change()
Dim intVal As Integer = 0
If Not Integer.TryParse(TextBox1.Text, intVal) Then
TextBox1.Text = String.Empty
End If
End Sub
这只允许Integer
类型,非字母字符......