有没有当input里的数字有变动后再进行计算的方法吗?而不是用FOR循环检测[已解决]
本帖最后由 xwt620 于 2011-12-25 18:59 编辑如图,就是当input里的数字有变动后自动计算结果,然后把LABEL更改为计算结果。 有。
看你的源码是如何的了。 回复 2# afan
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $aInput_NUM1,$aInput_NUM2,$aLabel_Count1,$aInput_NUM3,$aInput_NUM4,$aLabel_Count2
Global $COUNT
#Region ### START Koda GUI section ### Form=
$WinForm = GUICreate("QQ超市售货能力计算器", 716, 352, 274, 215)
$Group1 = GUICtrlCreateGroup("Group1", 8, 8, 169, 345)
For $i = 0 To 9
$aInput_NUM1[$i] = GUICtrlCreateInput("1", 16, 24+$i*24, 41, 21)
GUICtrlCreateUpdown($aInput_NUM1[$i])
GUICtrlSetLimit(-1, 30, 1)
Next
For $i = 0 To 9
$aInput_NUM2[$i] = GUICtrlCreateInput("0", 64, 24+$i*24, 41, 21)
GUICtrlCreateUpdown($aInput_NUM2[$i])
GUICtrlSetLimit(-1, 30, 0)
Next
For $i = 0 To 9
$aLabel_Count1[$i] = GUICtrlCreateLabel("0", 112, 24+$i*24, 36, 17)
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 168, 8, 169, 345)
For $i = 0 To 9
$aInput_NUM3[$i] = GUICtrlCreateInput("1", 168, 24+$i*24, 41, 21)
GUICtrlCreateUpdown($aInput_NUM3[$i])
GUICtrlSetLimit(-1, 30, 1)
Next
For $i = 0 To 9
$aInput_NUM4[$i] = GUICtrlCreateInput("0", 216, 24+$i*24, 41, 21)
GUICtrlCreateUpdown($aInput_NUM4[$i])
GUICtrlSetLimit(-1, 30, 0)
Next
For $i = 0 To 9
$aLabel_Count2[$i] = GUICtrlCreateLabel("0", 264, 24+$i*24, 36, 17)
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
For $i = 0 To 9
$NUM1 = Number(GUICtrlRead($aInput_NUM1[$i]))
$NUM2 = Number(GUICtrlRead($aInput_NUM2[$i]))
$COUNT[$i] = $NUM1 * $NUM2
GUICtrlSetData($aLabel_Count1[$i], $COUNT[$i])
Next
For $i = 0 To 9
$NUM3 = Number(GUICtrlRead($aInput_NUM1[$i]))
$NUM4 = Number(GUICtrlRead($aInput_NUM2[$i]))
$COUNT[$i] = $NUM1 * $NUM2
GUICtrlSetData($aLabel_Count2[$i], $COUNT[$i])
Next
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
回复 3# xwt620
这么闪,你都受得了啊 回复 3# xwt620
我不想用For循环的方法来进行计算,这样会出现数字不停地闪烁的情况 回复 4# afan
就是受不了才想得用的别的方法啊 WM_COMMAND可以实现 回复 7# cxlater
不太会用,能详细一点吗 回复 6# xwt620
闪,你用一个数组先记一下input里的值,然后判断现在的input值跟以前的是不是相同?
不相同时,才给lable控件GUICtrlSetData赋值,就不闪了嘛 这个问题有点意思~ 其难点可能并不是响应输入框的变化,而是因为控件比较多,且相互之间又互为联系,如何准确找到各自的位置。
LZ可以在创建控件时不妨先用Assign声明它们之间的关系,在消息循环中再Eval出它们的位置,就解决了。 回复 9# happytc
这个其实用你那个updown udf可能好些吧,直接走消息的办法 控件不算多的情况下直接搜索数组,控件多的情况下生成字典,
字典1==》左侧INPUT的ID==>右侧INPUT的ID
字典2==》右侧INPUT的ID==>左侧INPUT的ID
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)
;~ Global $aInput_NUM1, $aInput_NUM2, $aLabel_Count1, $aInput_NUM3, $aInput_NUM4, $aLabel_Count2
;~ Global $COUNT
Global $aInput_NUM1, $aLabel_Count1
#Region ### START Koda GUI section ### Form=
$WinForm = GUICreate("QQ超市售货能力计算器", 716, 352, 274, 215)
GUISetOnEvent(-3,"_exit")
$Group1 = GUICtrlCreateGroup("Group1", 8, 8, 169, 345)
For $i = 0 To 9
$aInput_NUM1[$i] = GUICtrlCreateInput("1", 16, 24 + $i * 24, 41, 21)
$aInput_NUM1[$i] = GUICtrlCreateInput("0", 64, 24 + $i * 24, 41, 21)
$aInput_NUM1[$i] = GUICtrlCreateLabel("0", 112, 24 + $i * 24, 36, 17)
GUICtrlCreateUpdown($aInput_NUM1[$i])
GUICtrlSetLimit(-1, 30, 1)
GUICtrlCreateUpdown($aInput_NUM1[$i])
GUICtrlSetLimit(-1, 30, 0)
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
;~ $Group2 = GUICtrlCreateGroup("Group2", 168, 8, 169, 345)
;~ For $i = 0 To 9
;~ $aInput_NUM3[$i] = GUICtrlCreateInput("1", 168, 24 + $i * 24, 41, 21)
;~ GUICtrlCreateUpdown($aInput_NUM3[$i])
;~ GUICtrlSetLimit(-1, 30, 1)
;~ Next
;~ For $i = 0 To 9
;~ $aInput_NUM4[$i] = GUICtrlCreateInput("0", 216, 24 + $i * 24, 41, 21)
;~ GUICtrlCreateUpdown($aInput_NUM4[$i])
;~ GUICtrlSetLimit(-1, 30, 0)
;~ Next
;~ For $i = 0 To 9
;~ $aLabel_Count2[$i] = GUICtrlCreateLabel("0", 264, 24 + $i * 24, 36, 17)
;~ Next
;~ GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
#EndRegion ### END Koda GUI section ###
While 1
Sleep(10)
WEnd
Func _exit()
Exit
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
$hWndFrom = $ilParam
$iIDFrom = _WinAPI_LoWord($iwParam)
$iCode = _WinAPI_HiWord($iwParam)
If $iCode = $EN_CHANGE Then
$index=_ArraySearch($aInput_NUM1,$iIDFrom,0,0,0,0,1,0)
If $index>-1 Then
GUICtrlSetData($aInput_NUM1[$index],GUICtrlRead($aInput_NUM1[$index])*GUICtrlRead($aInput_NUM1[$index]))
Else
$index=_ArraySearch($aInput_NUM1,$iIDFrom,0,0,0,0,1,1)
If Not @error Then GUICtrlSetData($aInput_NUM1[$index],GUICtrlRead($aInput_NUM1[$index])*GUICtrlRead($aInput_NUM1[$index]))
EndIf
EndIf
EndFunc ;==>WM_COMMAND
2分钟前还没答案的 支持3mile 学习一下 回复 12# 3mile
没接触过字典这个概念,我还是老老实实用数组搜索比较实在,只是代码要用很多了。。 呵呵,学习一下哈。。
页:
[1]