我尝试下面的代码:
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'未声明.由于其保护级别,它可能无法访问.
关于如何只允许字母表的任何想法?
看起来你试图逐字翻译VB6代码.你需要重新学习这门语言,除了名字之外,VB.NET完全不同.
在您的特定情况下,KeyAscii已被KeyPressedEventArgs两个成员取代:KeyChar和Handled.
此外,.NET区分字符和字符串(=字符集合),你不能简单地接受一个字符并将Like操作符应用于它,你也不应该.
相反,请执行以下操作:
If Character.IsLetter(e.KeyChar) Then
e.Handle = True
End If
Run Code Online (Sandbox Code Playgroud)
设置Handled为True与KeyAsciiVB6中设置为0的效果大致相同(阅读文档!).
此外,因为你明明只是交换,请务必同时启用Option Explicit,并Option Strict在项目的选择,以及使其成为在Visual Studio设置的进一步项目的默认.这有助于为您捕获大量错误.
最后,这段代码对可用性不利.它普遍认为字段应该不会以这样的方式限制用户输入(它也并不安全?如果什么用户使用复制和粘贴到输入无效的文本).相反,您应该在文本框' Validating事件中测试输入的有效性,因为它存在于此目的.
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |