【发布时间】:2012-01-07 02:28:38
【问题描述】:
基本上我正在尝试复制 Windows 7 (In-Windows) 激活密钥 TextBox 表单。将自动大写字母、删除或拒绝所有非字母数字字符的表单,除了每 5 个将自动输入的字符的破折号。
我认为这可以通过一个相当复杂的替换正则表达式来完成,但我似乎无法创建一个来满足需要。
这是我现在拥有的一个示例,但它创建了一个无限循环,因为它删除了包括破折号在内的所有字符,而不是添加破折号,这会更改文本并再次删除破折号。
任何建议、解决方案或想法都将不胜感激!
代码从原始问题修改为我正在使用的解决方案:
Private Sub aKeyTextField_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles aKeyTextField.KeyPress
'Test only
If Char.IsLetterOrDigit(e.KeyChar) Then
Dim test As String = ""
Select Case e.KeyChar
Case "0" To "9"
' Do nothing
Case "a" To "z"
e.KeyChar = Char.ToUpper(e.KeyChar)
Case Else
e.Handled = True
End Select
ElseIf Not e.KeyChar = Convert.ToChar(8) Then
e.KeyChar = ""
End If
Dim strKeyTextField As String = aKeyTextField.Text
Dim n As Integer = 5
Dim intlength As Integer = aKeyTextField.TextLength
If Not e.KeyChar = Convert.ToChar(8) Then
While intlength > 4 And intlength < 29
If aKeyTextField.Text.Length = 5 Then
strKeyTextField = strKeyTextField.Insert(5, "-")
End If
Dim singleChar As Char
singleChar = strKeyTextField.Chars(n)
While (n + 5) < intlength
If singleChar = "-" Then
n = n + 6
If n = intlength Then
strKeyTextField = strKeyTextField.Insert(n, "-")
End If
End If
End While
intlength = intlength - 5
End While
aKeyTextField.Text = strKeyTextField
'sets focus at the end of the string
aKeyTextField.Select(aKeyTextField.Text.Length, 0)
Else
Select Case aKeyTextField.Text.Length
Case 7
strKeyTextField = strKeyTextField.Remove(5, 1)
Case 13
strKeyTextField = strKeyTextField.Remove(11, 1)
Case 19
strKeyTextField = strKeyTextField.Remove(17, 1)
Case 25
strKeyTextField = strKeyTextField.Remove(23, 1)
Case Else
End Select
aKeyTextField.Text = strKeyTextField
aKeyTextField.Select(aKeyTextField.Text.Length, 0)
End If
End Sub
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim blankContextMenu As New ContextMenu
aKeyTextField.ContextMenu = blankContextMenu
End Sub
【问题讨论】: