如何规定input里面只能输入一定范围内的数字?
本帖最后由 omegabomb 于 2009-9-9 22:23 编辑比如效果就是一个input里面只能输入1-99之间的数字,输入其他的数字或者字符都无法输入。
并不是在按钮中加一个判断,而是在输入的时候就禁止超出这个范围的字符。
该怎么实现呢?
就像XP系统时间设置时,输入24无法输入的效果。 #Include <GuiEdit.au3>
$Input = GUICtrlCreateInput("", xx, xx, xx, xx,$ES_NUMBER)
GUICtrlSetLimit(-1, 2) 那假如最大数不是99呢,最大数为50呢? 那只能加判断~ GUI循环里加入
If GUICtrlRead(控件ID) > 50 Then GUICtrlSetData(控件ID, 50)
或者点击确定之类按钮后加判断,不符合条件的弹出提示,并设置输入光标到出错控件。 建议在循环里加判断,LS的大虾是个方案,我的如下
If GUICtrlRead(控件ID) > 50 then GUICtrlSetData(控件ID,StringTrimRight(GUICtrlRead(控件ID), 1))
感觉用户会踏实点,不会以为按错了键~
当然还可以人性化的加入工具提示窗 看一下ip框如何限定的,自己改一下 #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, $aXY)
$sString = GUICtrlRead($iIpt)
If $wparam <> 8 Then
$sString = StringLeft($sString, $aXY) & Chr($wparam) & StringRight($sString, StringLen($sString) - $aXY)
Else
$sString = StringLeft($sString, $aXY - 1) & StringRight($sString, StringLen($sString) - $aXY)
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, $iResult, $tBuffer
$tBuffer = DllStructCreate("int X;int Y")
$iResult = DllCall("User32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($tBuffer))
$aXY = DllStructGetData($tBuffer, "X")
$aXY = DllStructGetData($tBuffer, "Y")
$tBuffer = 0
Return $aXY
EndFunc ;==>_GetCaretPos
路过。。。 回复 8# pusofalse
能否用简单点的语句来实现?这个太深奥了 回复 10# mande_chen
NO,以我现在的水平,认为这是最简单的方法。 回复 11# pusofalse
{:3_88:}叹为观止 8楼代码不错 回复 8# pusofalse
请把复杂的问题,变成简单的脚本!
页:
[1]