我尝试了以下代码:
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'。由于其保护级别,它可能无法访问。
关于如何仅允许字母表的任何想法?
答案 0 :(得分:5)
看起来你试图逐字翻译VB6代码。你需要重新学习这门语言,除了名字之外,VB.NET完全不同。
在您的特定情况下,KeyAscii
已被KeyPressedEventArgs
取代,Validating
event有两个成员:KeyChar
和Handled
。
此外,.NET区分字符和字符串(=字符集合),您不能简单地使用字符并将Like
运算符应用于它,也不应该。
相反,请执行以下操作:
If Character.IsLetter(e.KeyChar) Then
e.Handle = True
End If
将Handled
设置为True
与在VB6中将KeyAscii
设置为0具有相同的效果(阅读文档!)。
此外,由于您显然只是在切换,因此请确保在项目选项中启用Option Explicit
和Option 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