2

特定の検証を実行する必要がある単純なアプリケーションをVb.netで作成しています。したがって、名前のテキストボックスで、たとえばazとAZの文字のみを受け入れるようにします。

このために私は次のコードを書きました:

   Private Sub txtname_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox5.KeyPress
    If Asc(e.KeyChar) <> 8 Then
        If Asc(e.KeyChar) > 65 Or Asc(e.KeyChar) < 90 Or Asc(e.KeyChar) > 96 Or Asc(e.KeyChar) < 122 Then
            e.Handled = True
        End If
    End If
End Sub

しかし、どういうわけかそれは私が文字を入力することを許可していません。文字を入力しようとしても何も起こりません。

この問題の原因とその解決方法を教えてください。

4

4 に答える 4

11

または、次のようにすることもできます。

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) _
                              Handles txtName.KeyPress

    If Not (Asc(e.KeyChar) = 8) Then
        Dim allowedChars As String = "abcdefghijklmnopqrstuvwxyz"
        If Not allowedChars.Contains(e.KeyChar.ToString.ToLower) Then
            e.KeyChar = ChrW(0)
            e.Handled = True
        End If
    End If

End Sub

または、それでも方法が必要な場合はASCII、これを試してください、

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtName.KeyPress

    If Not (Asc(e.KeyChar) = 8) Then
        If Not ((Asc(e.KeyChar) >= 97 And Asc(e.KeyChar) <= 122) Or (Asc(e.KeyChar) >= 65 And Asc(e.KeyChar) <= 90)) Then
            e.KeyChar = ChrW(0)
            e.Handled = True
        End If
    End If

End Sub

どちらも同じように動作します。

于 2012-09-28T04:55:26.920 に答える
0
Private Sub txtname_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox5.KeyPress

    If AscW(e.KeyChar) > 64 And AscW(e.KeyChar) < 91 Or AscW(e.KeyChar) > 96 And AscW(e.KeyChar) < 123 Or AscW(e.KeyChar) = 8 Then 
    Else
        e.KeyChar = Nothing
    End If

End Sub

これがお役に立てば幸いです。

于 2013-10-06T15:27:30.303 に答える
0

これはより抽象的なアプローチですが、それでも効果的です。簡単で、TextChangedイベントに追加するだけです。サブにハンドルを追加し、を使用することで、複数のテキストボックスで使用できますDirectCast()

Dim allowed As String = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
        For Each c As Char In TextBox.Text
            If allowed.Contains(c) = False Then
                TextBox.Text = TextBox.Text.Remove(TextBox.SelectionStart - 1, 1)
                TextBox.Select(TextBox.Text.Count, 0)
            End If
        Next

概要:無効な文字が入力された場合、その文字はすぐに削除されます(ほとんどの場合、文字はユーザーが気付くのに十分な時間表示されません)。

于 2015-08-01T04:14:01.593 に答える
-1
Private Sub txtStudentName_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtStudentName.KeyPress

  If Not Char.IsLetter(e.KeyChar) And Not e.KeyChar = Chr(Keys.Delete) And Not e.KeyChar = Chr(Keys.Back) And Not e.KeyChar = Chr(Keys.Space) Then

      e.Handled = True

  End If

End Sub
于 2017-05-27T04:54:59.233 に答える