回 帖 发 新 帖 刷新版面

主题:在VB里怎么定义在文本里只能输入数字

在VB里怎么定义在文本里只能输入数字

回复列表 (共20个回复)

沙发

一般好象是这么作的,可以用ISNUMERIC函数来检测,如果不是数字,就提示重输

板凳

用2个API加1个常数

3 楼

同意2楼。

4 楼

'呵呵 为了这个加两个API好像不怎么划算~`
Private Sub Text1_Change()
  If IsNumeric(Text1.Text) = False Then Text1.Text = ""
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
   If Not (KeyAscii >= Asc(0) And KeyAscii <= Asc(9) Or KeyAscii = 8) Then KeyAscii = 0
End Sub

5 楼

楼上,你的代码会把退格键和删除键也吃掉的
还有,如果用户想把光标左移或右移,也会给你吃掉的

自己写代码,一般是不如系统自带的考虑得周全的。

6 楼

[quote]楼上,你的代码会把退格键和删除键也吃掉的
还有,如果用户想把光标左移或右移,也会给你吃掉的

自己写代码,一般是不如系统自带的考虑得周全的。[/quote]

请楼上试过再发言 谢谢~`

7 楼

上面已经加了 or KeyAscii = 8 所以不会把 退格键 吃了
事件是在 _KeyPress 里的 并不在 _keydown 事件里 所以并不会捕捉到 方向键 自然也吃不了

何况:用2个API加1个常数
说了也是白说   就这2和1 关键字我在百度搜不出来

8 楼

Text1_KeyPress(KeyAscii As Integer)事件里不检测del和方向键
只用
Private Sub Text1_KeyPress(KeyAscii As Integer)
   If Not (KeyAscii >= Asc(0) And KeyAscii <= Asc(9) Or KeyAscii = 8) Then KeyAscii = 0
End Sub
可以限制键盘输入,但不能屏蔽用鼠标右键菜单的粘贴,所以需要Text1_Change,只是上面的代码还不完美!

顺便在这里我也问个问题:
对于textbox.maxlenth属性,设置后当先输入汉字再输入字母的时候不能限制其长度
以前用windows98编程没遇到过这个问题,用xp 出现的,只能另写代码修改之,但不知其原因???请高手帮忙解释

9 楼

是,我错了,你的代码没问题

另外,我也错了,应该是2个常数和2个API

我不写代码是因为这些问题问得太泛滥了,我所看到的同样问题的起码有5个帖子以上。

每天给人家问1+2=?,谁都累,看得多了,就会回答1+1+1=?

[url]http://bbs.pfan.cn/post-270552.html[/url]

10 楼

Option Explicit

Private Const GWL_STYLE = (-16)
Private Const ES_NUMBER = &H2000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()    
    Dim ctl As Control, ls As Long
    '枚举窗体上所有控件
    For Each ctl In Me.Controls
        '判断是否为TextBox控件
        If TypeName(ctl) = "TextBox" Then
            '获取TextBox控件的风格,并与ES_NUMBER进行位或运算,再设置新风格
            ls = GetWindowLong(ctl.hwnd, GWL_STYLE)
            Call SetWindowLong(ctl.hwnd, GWL_STYLE, ls Or ES_NUMBER)
        End If
    Next    
End Sub

试了下代码 右健还是可以粘贴的~`   
不过这个方法没试过 学了一招 呵呵~

我来回复

您尚未登录,请登录后再回复。点此登录或注册