0

我尝试了以下代码:

 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”。由于其保护级别,它可能无法访问。

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

4

5 回答 5

5

看起来您试图逐字翻译 VB6 代码。您需要重新学习该语言,VB.NET 完全不同,只是名称不同。

在您的特定情况下,KeyAscii已被替换为KeyPressedEventArgs具有两个成员的 :KeyCharHandled.

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

相反,请执行以下操作:

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

设置Handled为通常与在 VB6True中设置为 0 具有相同的效果(请阅读文档!)。KeyAscii

此外,由于您显然只是在切换,请确保在项目选项中启用这两个选项,Option ExplicitOption Strict在 Visual Studio 设置中将其设为其他项目的默认设置。这有助于为您捕获很多错误。

最后,这段代码不利于可用性。人们普遍认为,字段不应这种方式限制用户输入(而且也不安全:如果用户使用复制和粘贴来输入无效文本怎么办?)。Validating相反,您应该在文本框的event中测试输入的有效性,因为它存在这个目的。

于 2012-06-10T08:01:34.153 回答
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
于 2012-06-10T08:04:57.140 回答
1

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

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

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

于 2012-06-10T08:01:25.180 回答
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
于 2012-06-10T08:24:33.047 回答
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
于 2015-02-20T04:04:30.323 回答