【发布时间】:2016-08-13 13:30:35
【问题描述】:
我试图阻止用户在 TextBox1 中输入字母。我希望用户只输入数字。我在 TextBox 的 KeyUp 事件中编写了以下代码,但程序没有按预期运行。无论输入什么数据,编译器都会评估 MessageBox.show。 如果用户输入一个数字,MessageBox 会显示消息,如果输入一个字母,即使这样它也会被执行。 请问下面的代码有什么问题吗?
Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
If (Not Char.IsNumber(ChrW(e.KeyCode))) Then
MessageBox.Show("Enter only numbers")
End If
End Sub
【问题讨论】:
-
“我希望用户只输入数字” - 然后阅读How to Ask 并尝试搜索,您不是第一个想要这样做的人。所有 KeyUp 和其他键盘事件处理程序都会失败,例如因为您可以通过上下文菜单复制粘贴输入文本。使用 MaskedTextBox。至于您的实际问题:您对
ChrW(e.KeyCode)的期望与现实不符,因此设置断点并检查您的变量。 -
@CodeCaster,回复对我已删除答案的评论:那是真的。虽然可以自己实现检查(例如通过
TextChanged事件),但MaskedTextBox已经提供了很好的限制输入的功能。 -
@VisualVincent 是的,很抱歉对这个答案如此苛刻,但网络上到处都是“使用
Char.IsNumber的 KeyPress 事件。这不考虑负数、小数和千位分隔符(注意全球化)并通过上下文菜单粘贴或设置不涉及按键的值。关于此有数百个问题,并且所有问题都包含低于标准的验证。正确的方法是 MaskedTextBox,如果不能满足所需需求,还有其他解决方案。:) -
@CodeCaster :别担心,我会活下来的。 :) -- 一切都取决于你想用
TextBox做什么。也许您不需要千位分隔符甚至负数?虽然只输入一个数字,但如果是这样的话,也许NumericUpDown是最好的?