【问题标题】:Char.IsNumber(ChrW(e.KeyCode)Char.IsNumber(ChrW(e.KeyCode)
【发布时间】: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 是最好的?

标签: .net vb.net


【解决方案1】:

使用以下代码:

'e.handled = false function is to prevent the user from entering alphabets

Private Sub TextBox1_Keypress(sender As Object, e As KeyEventArgs) Handles TextBox1.Keypress        
    If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 127 Then
        e.Handled = False
    Else
        e.Handled = True
        MessageBox.Show("Enter only numbers")
    End If
End Sub

希望我说对了。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2012-07-23
    • 2019-04-27
    • 2010-09-18
    • 2011-05-28
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多