例如,我只将每行中的第二个字符设为x,而第3到第10个字符必须是十六进制数字。 目前我使用Select Case,然后检查插入符号的位置(使用textbox.selectionstart),看看被按下的键是否是“合法”字符。
是否有更好的方法可以减慢大量文本的速度。
这是我目前的代码:
Select Case TextBox1.SelectionStart
Case TextBox1.GetFirstCharIndexOfCurrentLine + 1
If Not e.KeyChar = "x" Then
e.Handled = True
End If
Case (TextBox1.GetFirstCharIndexOfCurrentLine + 2) To (TextBox1.GetFirstCharIndexOfCurrentLine + 9)
Dim allowedchars As String = "abcdefABCDEF0123456789" & vbCrLf & Chr(Keys.Back)
If allowedchars.Contains(e.KeyChar) Then
e.Handled = False
Else
e.Handled = True
End If
End Select
答案 0 :(得分:1)
您可以只允许输入任何内容,然后使用单个正则表达式检查整个字符串的有效性。这将加速一些事情,特别是在大量文本上。
答案 1 :(得分:0)
我不确定性能差异,但是这样的事情可能会更快地测试你的第1和第3至第9个字符(如果我的VB稍微关闭,我会道歉,这已经有一段时间了):
If Not Char.IsControl(e.KeyChar) Then
Dim test As Int = 0
Integer.TryParse(e.KeyChar.ToString(), System.Globalization.NumberStyles.HexNumber, Nothing, ByRef test)
If test = 0 Then
e.Handled = True
End If
End if
编辑 - 忘记控制字符测试...
答案 2 :(得分:0)
你可以在第10个角色后停止检查吗?
If TextBox1.SelectionStart < 11 Then
' your code
End If
答案 3 :(得分:0)
你说它减慢了大量的文字;也许这是TextBox1.GetFirstCharIndexOfCurrentLine
调用,需要更长时间才能使用大量文本。你叫它三次,但你只能叫它一次:
Dim firstChar As Integer = TextBox1.GetFirstCharIndexOfCurrentLine()
Select Case TextBox1.SelectionStart
Case firstChar + 1
...
Case firstChar + 2 To firstChar + 9
...
End Select
代码也看起来更干净!