xwt620 发表于 2011-12-18 23:13:49

有没有当input里的数字有变动后再进行计算的方法吗?而不是用FOR循环检测[已解决]

本帖最后由 xwt620 于 2011-12-25 18:59 编辑


如图,就是当input里的数字有变动后自动计算结果,然后把LABEL更改为计算结果。

afan 发表于 2011-12-18 23:16:36

有。
看你的源码是如何的了。

xwt620 发表于 2011-12-18 23:39:21

回复 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

afan 发表于 2011-12-18 23:41:14

回复 3# xwt620


    这么闪,你都受得了啊

xwt620 发表于 2011-12-18 23:41:52

回复 3# xwt620


    我不想用For循环的方法来进行计算,这样会出现数字不停地闪烁的情况

xwt620 发表于 2011-12-18 23:43:06

回复 4# afan


    就是受不了才想得用的别的方法啊

cxlater 发表于 2011-12-19 00:18:23

WM_COMMAND可以实现

xwt620 发表于 2011-12-19 00:20:07

回复 7# cxlater


    不太会用,能详细一点吗

happytc 发表于 2011-12-19 00:31:03

回复 6# xwt620


    闪,你用一个数组先记一下input里的值,然后判断现在的input值跟以前的是不是相同?
不相同时,才给lable控件GUICtrlSetData赋值,就不闪了嘛

afan 发表于 2011-12-19 01:24:17

这个问题有点意思~ 其难点可能并不是响应输入框的变化,而是因为控件比较多,且相互之间又互为联系,如何准确找到各自的位置。
LZ可以在创建控件时不妨先用Assign声明它们之间的关系,在消息循环中再Eval出它们的位置,就解决了。

netegg 发表于 2011-12-19 04:02:09

回复 9# happytc
这个其实用你那个updown udf可能好些吧,直接走消息的办法

3mile 发表于 2011-12-19 14:13:07

控件不算多的情况下直接搜索数组,控件多的情况下生成字典,
字典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

kyniel 发表于 2011-12-19 14:18:53

2分钟前还没答案的 支持3mile 学习一下

xwt620 发表于 2011-12-21 00:25:00

回复 12# 3mile


    没接触过字典这个概念,我还是老老实实用数组搜索比较实在,只是代码要用很多了。。

menfan1 发表于 2011-12-24 09:52:23

呵呵,学习一下哈。。
页: [1]
查看完整版本: 有没有当input里的数字有变动后再进行计算的方法吗?而不是用FOR循环检测[已解决]