0

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`

助けてくれてありがとう。

4

2 に答える 2

1

テキストボックスのKeyDownイベントで、をチェックしe.KeyCodeます。これにより、特定の文字が処理されないようにすることができます。KeyDownドキュメントに例があります。

于 2012-09-07T12:50:49.627 に答える
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
于 2012-09-07T13:43:33.113 に答える