限制用户可以放入文本框vb.net的字符范围

时间:2012-09-07 08:54:06

标签: vb.net visual-studio visual-studio-2005

我有一个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`

谢谢你的帮助。

2 个答案:

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