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`
助けてくれてありがとう。