我有一个vb格式的文本框,我想限制用户可以放入文本框的字符范围:" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890^-*()."
。文本框是将SI单位插入数据库,因此我需要一致的语法。如果用户在文本框中键入无效字符,我希望文本框拒绝插入它,或者立即将其删除,将光标留在文本框中的相同位置。我还希望文本框用"/"
替换"^(-"
并将光标放在此之前。
我在其他地方发现了一些我编辑过的代码,但是代码很糟糕,它会在文本框中更改的文本上激活。这会导致代码失败,当用户输入一个不允许的值时,它会在尝试更改文本框中的文本时激活自己激活的代码。
这是我的代码,文本框以表单设计器中的内容"enter SI Units"
开头。
Private Sub TxtQuantityTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSIUnit.TextChanged
If txtSIUnit.Text = "Enter SI Units" Then
Exit Sub
End If
Dim charactersAllowed As String = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890^-*()."
Dim Text As String = txtSIUnit.Text
Dim Letter As String
Dim SelectionIndex As Integer = txtSIUnit.SelectionStart
Dim Change As Integer
Letter = txtSIUnit.Text.Substring(SelectionIndex - 1, 1)
If Letter = "/" Then
Text = Text.Replace(Letter, "^(-")
SelectionIndex = SelectionIndex - 1
End If
Letter = txtSIUnit.Text.Substring(SelectionIndex - 1, 1)
If charactersAllowed.Contains(Letter) = False Then
Text = Text.Replace(Letter, String.Empty)
Change = 1
End If
txtSIUnit.Text = Text
txtSIUnit.Select(SelectionIndex - Change, 0)
If txtQuantity.Text <> "Enter Quantity" Then
If cmbStateRateSumRatio.SelectedIndex <> -1 Then
bttAddQUAtoDatabase.Enabled = True
End If
End If
End Sub`
谢谢你的帮助。
答案 0 :(得分:1)
在文本框的KeyDown
事件中,选中e.KeyCode
。这可以防止处理某些字符。 KeyDown文档中有一个示例。
答案 1 :(得分:1)
使用KeyPress事件。如果你不喜欢这个角色,请将e.Handled设置为true。这是一个单行:
Private Const AllowedChars = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890^-*()."
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As PressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar >= " "c AndAlso Not AllowedChars.Contains(e.KeyChar) Then e.Handled = True
End Sub