注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

春苑

快乐晚年

 
 
 

日志

 
 
关于我

我,一个学校退休电教管理员。爱好无线电与电脑技术,很想在网络上结交与我有相同爱好的同仁。

网易考拉推荐

编程快活,防止老年痴呆?  

2012-03-16 22:09:46|  分类: 电脑情结 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天想叫一个 TextBox 只能接受数字和小数点的输入,什么方法都用上了。本来输入小数点都用大小键盘上的句号键就行了(在小键盘上输入数字,要打开 NumLock 灯),他们的 ASCII 码是 46 ,可是,在VB.NET 中,它们的 ASCII 码都是 190 了!原来,它们又叫“句点”!句点的 ASCII 码就是 190!由于我从前一直用 VB 6 编程,在 VB.NET 中也习惯使用 VB 6 的语法及惯列。所以一些模块总是不能顺畅地运行而且老是出现一些令人啼笑皆非的现象。后来,在微软在线帮助指导下,顺利地解决了这个问题。以下是这些模块,存此为照。

#Region "金额检测 TextBox1"
    '借鉴微软代码,略有增加
    Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        'PCErrProvider.Icon = My.Resources.eventlogError
        ' PCErrProvider.SetError(TextBox1, String.Empty)
        ' Initialize the flag to false.
        nonNumberEntered = False
        'PCErrProvider.SetError(TextBox1, String.Empty)
        ' Determine whether the keystroke is a number from the top of the keyboard.
        If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then '大键盘
            ' Determine whether the keystroke is a number from the keypad.
            If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then '小键盘
                ' Determine whether the keystroke is a backspace.
                If e.KeyCode <> Keys.Back Then
                    ' A non-numerical keystroke was pressed.
                    ' Set the flag to true and evaluate in KeyPress event.
                    If e.KeyCode = Keys.OemPeriod OrElse e.KeyCode = Keys.Decimal Then '允许输入小数点(句点)
                        'Keys.OemPeriod:大键盘的句点;Keys.Decimal:小键盘的句点
                        If InStr(TextBox1.Text, ".") > 0 Then
                            nonNumberEntered = True
                            'PCErrProvider.SetError(TextBox1, "已经输入过小数点了") '金额只需要输入数字和小数,而且小数点只能输入一次
                        Else
                            nonNumberEntered = False
                        End If
                    Else
                        'PCErrProvider.SetError(TextBox1, "输入的不是数字!")
                        nonNumberEntered = True
                    End If
                End If
            End If
        End If
        'If shift key was pressed, it's not a number.
        If Control.ModifierKeys = Keys.Shift Then
            nonNumberEntered = True
        End If
    End Sub


    ' This event occurs after the KeyDown event and can be used
    ' to prevent characters from entering the control.
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If nonNumberEntered = True Then
            ' Stop the character from being entered into the control since it is non-numerical.
            e.Handled = True
        End If
    End Sub

另外,微软还有另一个方法实现这个目的:

Private Sub TextBox1_KeyDown(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

        If e.KeyCode >= Keys.D0 And e.KeyCode <= Keys.D9 And _
        e.Modifiers <> Keys.Shift Then
            e.SuppressKeyPress = True
        End If
    End Sub

  评论这张
 
阅读(610)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017