允许文本框中某些位置的某些字符(vb.net)

时间:2010-02-10 17:20:07

标签: .net vb.net textbox position character

例如,我只将每行中的第二个字符设为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

4 个答案:

答案 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

代码也看起来更干净!