找回密码
 加入
搜索
查看: 2811|回复: 13

如何规定input里面只能输入一定范围内的数字?

  [复制链接]
发表于 2009-9-9 22:21:08 | 显示全部楼层 |阅读模式
本帖最后由 omegabomb 于 2009-9-9 22:23 编辑

比如效果就是一个input里面只能输入1-99之间的数字,输入其他的数字或者字符都无法输入。
并不是在按钮中加一个判断,而是在输入的时候就禁止超出这个范围的字符。
该怎么实现呢?

就像XP系统时间设置时,输入24无法输入的效果。

评分

参与人数 1金钱 -10 收起 理由
afan -10 未改分类

查看全部评分

发表于 2009-9-9 22:23:15 | 显示全部楼层
#Include <GuiEdit.au3>
$Input = GUICtrlCreateInput("", xx, xx, xx, xx,$ES_NUMBER)
GUICtrlSetLimit(-1, 2)
 楼主| 发表于 2009-9-9 22:36:46 | 显示全部楼层
那假如最大数不是99呢,最大数为50呢?
发表于 2009-9-9 23:22:04 | 显示全部楼层
那只能加判断~
发表于 2009-9-10 00:23:16 | 显示全部楼层
GUI循环里加入
If GUICtrlRead(控件ID) > 50 Then GUICtrlSetData(控件ID, 50)
或者点击确定之类按钮后加判断,不符合条件的弹出提示,并设置输入光标到出错控件。
发表于 2009-9-10 00:35:14 | 显示全部楼层
建议在循环里加判断,LS的大虾是个方案,我的如下
If GUICtrlRead(控件ID) > 50 then GUICtrlSetData(控件ID,StringTrimRight(GUICtrlRead(控件ID), 1))
感觉用户会踏实点,不会以为按错了键~
当然还可以人性化的加入工具提示窗
发表于 2009-9-10 01:06:25 | 显示全部楼层
看一下ip框如何限定的,自己改一下
发表于 2009-9-10 01:23:04 | 显示全部楼层
#include <WinAPI.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>


$hGUI = GUICreate("Test", 200, 100)
$iIpt = GUICtrlCreateInput("", 20, 20, 160, 20)
$hCtrl = GUICtrlGetHandle(-1)
$hCall = DllCallbackRegister("_IptProc", "int", "hWnd;uint;wparam;lparam")
$pCall = DllCallbackGetPtr($hCall)
$hOldCall = _WinAPI_SetWindowLong($hCtrl, -4, $pCall)
GUISetState()

Do
Until guiGetMsg() = -3

Func _IptProc($hWnd, $iMsg, $wparam, $lparam)
        Switch $iMsg
        Case $WM_PASTE
                Return 1
        Case $WM_SETTEXT
                Return 1
        Case $WM_CHAR
                Local $aXY, $sString
                If Not StringIsDigit(Chr($wparam)) AND $wparam <> 8 Then Return 0
                $aXY = _GetCaretPos()
                $aXY = _GUICtrlEdit_CharFromPos($hCtrl, $aXY[0], $aXY[1])
                $sString = GUICtrlRead($iIpt)
                If $wparam <> 8 Then
                        $sString = StringLeft($sString, $aXY[0]) & Chr($wparam) & StringRight($sString, StringLen($sString) - $aXY[0])
                Else
                        $sString = StringLeft($sString, $aXY[0] - 1) & StringRight($sString, StringLen($sString) - $aXY[0])
                EndIf
                If StringLeft($sString, 1) = "0" Then Return 0
                If $sString <> "" AND (Number($sString) < 1 OR Number($sString) > 50) Then Return 0

        EndSwitch
        Return _WinAPI_CallWindowProc($hOldCall, $hWnd, $iMsg, $wparam, $lparam)
EndFunc        ;==>_IptProc



Func _GetCaretPos()
        Local $aXY[2], $iResult, $tBuffer

        $tBuffer = DllStructCreate("int X;int Y")
        $iResult = DllCall("User32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($tBuffer))
        $aXY[0] = DllStructGetData($tBuffer, "X")
        $aXY[1] = DllStructGetData($tBuffer, "Y")
        $tBuffer = 0
        Return $aXY
EndFunc        ;==>_GetCaretPos
发表于 2009-9-10 09:40:33 | 显示全部楼层
路过。。。
发表于 2010-1-23 16:38:14 | 显示全部楼层
回复 8# pusofalse


    能否用简单点的语句来实现?这个太深奥了
发表于 2010-1-23 16:41:56 | 显示全部楼层
回复 10# mande_chen


    NO,以我现在的水平,认为这是最简单的方法。
发表于 2010-1-23 18:07:57 | 显示全部楼层
回复 11# pusofalse


      叹为观止
发表于 2010-11-1 01:45:32 | 显示全部楼层
8楼代码不错
发表于 2010-11-2 07:11:25 | 显示全部楼层
回复 8# pusofalse


    请把复杂的问题,变成简单的脚本!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 02:25 , Processed in 0.090703 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表