我有一个 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`
谢谢你的帮助。