如何只允许A-Za-z字符

时间:2012-06-10 07:57:39

标签: .net vb.net

我尝试了以下代码:

 Private Sub txtName_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtName.KeyPress
  ' allow upper and lower case A-Z, and backspace
  If Not Chr(KeyAscii) Like "[A-Za-z]" And KeyAscii <> 8 Then KeyAscii = 0
 End Sub

但它给出了:

  

未声明'KeyAscii'。由于其保护级别,它可能无法访问。

关于如何仅允许字母表的任何想法?

5 个答案:

答案 0 :(得分:5)

看起来你试图逐字翻译VB6代码。你需要重新学习这门语言,除了名字之外,VB.NET完全不同。

在您的特定情况下,KeyAscii已被KeyPressedEventArgs取代,Validating event有两个成员:KeyCharHandled

此外,.NET区分字符和字符串(=字符集合),您不能简单地使用字符并将Like运算符应用于它,也不应该。

相反,请执行以下操作:

If Character.IsLetter(e.KeyChar) Then
    e.Handle = True
End If

Handled设置为True与在VB6中将KeyAscii设置为0具有相同的效果(阅读文档!)。

此外,由于您显然只是在切换,因此请确保在项目选项中启用Option ExplicitOption Strict,并使其成为Visual Studio设置中其他项目的默认设置。这有助于为您捕获大量错误。

最后,此代码对可用性不利。通常认为字段应该以这种方式约束用户输入(并且它也不安全:如果用户使用copy&amp; paste输入无效文本会怎样?)。相反,您应该在文本框“{{3}}中测试输入的有效性,因为它存在于此目的。”

答案 1 :(得分:2)

您应该使用以下正则表达式:

Dim reg_exp As New RegExp
reg_exp.Pattern = "^[a-zA-Z]*$"
If reg_exp.Test(txtName.Text.Trim()) Then
   MessageBox.Show("Input name is correct")
Else
   MessageBox.Show("Input name is not correct")
End If

答案 2 :(得分:1)

KeyAscii在哪里定义?看起来它超出了范围。

由于您不能将其作为参数传递,请尝试首先全局声明它。然后你应该能够在你的方法中访问它。

免责声明:虽然我之前使用过它,但我对VB.NET的了解非常有限。

答案 3 :(得分:1)

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As     System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

Dim keyAscii As Char
keyAscii = e.KeyChar

        If keyAscii > Chr(64) And keyAscii < Chr(91) Then
        'char is A-Z

    End If

    If keyAscii > Chr(96) And keyAscii < Chr(123) Then
        'char is a-z
    End If
End Sub

答案 4 :(得分:0)

If (Microsoft.VisualBasic.Asc(e.KeyChar) < 65) _
 Or (Microsoft.VisualBasic.Asc(e.KeyChar) > 122) Then
e.Handled = True
End If
If (Microsoft.VisualBasic.Asc(e.KeyChar) = 8) Then
e.Handled = False
End If