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

Dev*_*555 0 .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
Run Code Online (Sandbox Code Playgroud)

但它给出了:

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

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

Kon*_*lph 5

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

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

此外,.NET区分字符和字符串(=字符集合),你不能简单地接受一个字符并将Like操作符应用于它,你也不应该.

相反,请执行以下操作:

If Character.IsLetter(e.KeyChar) Then
    e.Handle = True
End If
Run Code Online (Sandbox Code Playgroud)

设置HandledTrueKeyAsciiVB6中设置为0的效果大致相同(阅读文档!).

此外,因为你明明只是交换,请务必同时启用Option Explicit,并Option Strict在项目的选择,以及使其成为在Visual Studio设置的进一步项目的默认.这有助于为您捕获大量错误.

最后,这段代码对可用性不利.它普遍认为字段应该不会以这样的方式限制用户输入(它也并不安全?如果什么用户使用复制和粘贴到输入无效的文本).相反,您应该在文本框' Validating事件中测试输入的有效性,因为它存在于此目的.