限制文本框(TextBox)只能输入数字(VB6代码)

在一些要求只允许输入数值的场合,就用得上了.

基本思路是,先在文本框的keyPress事件里过滤键盘输入,再使用子类化将粘贴剪切等剪贴板操作吃掉.

窗体frmMain.frm内代码(窗体包含一个文本框Text1):

Option Explicit
'只允许文本框输入数值示例
'
'处理思路:
'           先在文本框的KeyPress事件里处理键盘上的输入,再使用子类化禁止复制粘贴与剪切消息.
'
'BY  嗷嗷叫的老马
' 紫水晶工作室
' http://www.m5home.com/
'2009-10-03

Private Sub Form_Load()
    '复制粘贴剪切使用子类化处理
    PrevWndProc = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf SubWndProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong Text1.hwnd, GWL_WNDPROC, PrevWndProc
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    '只允许数字键,退格键,小数点进行输入的处理
    Debug.Print KeyAscii
    Select Case KeyAscii
        Case vbKey0 To vbKey9, vbKeyBack        '0 - 9,BACKSPACE处理
        Case vbKeyDelete, vbKeyDecimal          '小数点处理
            If InStr(1, Text1.Text, ".") <> 0 Then KeyAscii = 0
        Case Else
            KeyAscii = 0
    End Select
End Sub
 

标准模块ModSubClass.bas中的代码:

Option Explicit
'子类化模块
'
'BY  嗷嗷叫的老马
' 紫水晶工作室
' http://www.m5home.com/
'2009-10-03

Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongW" ( _
        ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcW" ( _
        ByVal lpPrevWndFunc As Long, _
        ByVal hwnd As Long, _
        ByVal msg As Long, _
        ByVal wParam As Long, _
        ByVal lParam As Long) As Long
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
        ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
Public Const GWL_STYLE      As Long = (-16)
Public Const ES_NUMBER      As Long = &H2000&
Public Const GWL_WNDPROC    As Long = (-4)
Public Const WM_GETTEXT     As Long = &HD
Public Const WM_COPY        As Long = &H301
Public Const WM_PASTE       As Long = &H302
Public Const WM_CUT         As Long = &H300

Public PrevWndProc     As Long

Public Function SubWndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case msg                       '在这里进行过滤.如果知道其他的消息,也可以在这里过滤.
        Case WM_COPY, WM_PASTE, WM_CUT      '复制,粘贴,剪切处理
            SubWndProc = 1                  '吃掉不处理.
            Exit Function
    End Select
    SubWndProc = CallWindowProc(PrevWndProc, hwnd, msg, wParam, lParam)                       '其它消息不管
End Function




相关可能感觉趣的参考

VB 获取TextBox文本框中的行数函数

VB快速读取 TextBox N 行的资料

限制文本框(TextBox)只能输入数字(VB6代码)

VB 提取TextBox 文本框中指定一行字符串

VB 小技巧自定义TextBox文本框右键菜单

VB 获取光标在TextBoxRichTextBox中所在的位置

VB

部分 相关 推荐

VB快速读取 TextBox N 行的资料

VB禁止使用 Alt-Tab Ctrl-Alt-Del

生成迷宫的程序

另一方法转换大小写

VB控件注册 - 利用资源文件将dllocx打包进exe文件

VB利用资源文件进行工作

[]vb高效编程(优化)

VB阳历转阴历

VB代码取得硬盘的物理序列号

VB获得磁盘的文件系统

VB的,经常注册和反注册OCX控件和DLL

VB从程序中生成Exe文件

VB6监视/操作剪贴板示例(VB6.0代码)

VB6里自动提交/自动填表的一种相对通用的方案

VB移动没有标题的窗体

VB随机字母的函数

VB删除带子文件夹和文件的文件夹

VB怎样屏蔽 Alt+F4

VB 隐藏进程

vb屏蔽文本框点右键时的弹出菜单

VB手控Combobox的打开或收起

VBINI文件的读写、删除(对中文支持很好)

vb全局热键的写法(占很少的资源)

vb取消文本框的粘贴功能

VB常用文件操作类

VB获取特殊文件夹

VB获取windows各常用目录的函数(模块)

VB生成太极图

VB:常用内部函数大全,你会了几个呢?

vbSendMessage函数

精简VB程序的代码

VB:将数字转换为大写中文

VB:设定 MsgBox 在若干时间之后若无回应则自动关闭

VB:读取及设定NumLock/CapsLock/ScrollLock的值

VB:您知道 Mid$ 函量可以放在 '=' 的左方吗

VB后台获得按键,并执行自己的函数(非钩子及热键)

VB:将短文件名格式转成长文件名

vb中使用Iphlpapi.dll获取网络信息(上)

vb中使用Iphlpapi.dll获取网络信息(下)

更多精彩 >>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值