找回密码
 加入
搜索
查看: 6093|回复: 14

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

 火.. [复制链接]
发表于 2011-12-18 23:13:49 | 显示全部楼层 |阅读模式
本帖最后由 xwt620 于 2011-12-25 18:59 编辑


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-12-18 23:16:36 | 显示全部楼层
有。
看你的源码是如何的了。
 楼主| 发表于 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[10],$aInput_NUM2[10],$aLabel_Count1[10],$aInput_NUM3[10],$aInput_NUM4[10],$aLabel_Count2[10]
Global $COUNT[10]
#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
发表于 2011-12-18 23:41:14 | 显示全部楼层
回复 3# xwt620


    这么闪,你都受得了啊
 楼主| 发表于 2011-12-18 23:41:52 | 显示全部楼层
回复 3# xwt620


    我不想用For循环的方法来进行计算,这样会出现数字不停地闪烁的情况
 楼主| 发表于 2011-12-18 23:43:06 | 显示全部楼层
回复 4# afan


    就是受不了才想得用的别的方法啊
发表于 2011-12-19 00:18:23 | 显示全部楼层
WM_COMMAND可以实现
 楼主| 发表于 2011-12-19 00:20:07 | 显示全部楼层
回复 7# cxlater


    不太会用,能详细一点吗
发表于 2011-12-19 00:31:03 | 显示全部楼层
回复 6# xwt620


    闪,你用一个数组先记一下input里的值,然后判断现在的input值跟以前的是不是相同?
不相同时,才给lable控件GUICtrlSetData赋值,就不闪了嘛
发表于 2011-12-19 01:24:17 | 显示全部楼层
这个问题有点意思~ 其难点可能并不是响应输入框的变化,而是因为控件比较多,且相互之间又互为联系,如何准确找到各自的位置。
LZ可以在创建控件时不妨先用Assign声明它们之间的关系,在消息循环中再Eval出它们的位置,就解决了。
发表于 2011-12-19 04:02:09 | 显示全部楼层
回复 9# happytc
这个其实用你那个updown udf可能好些吧,直接走消息的办法
发表于 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[10], $aInput_NUM2[10], $aLabel_Count1[10], $aInput_NUM3[10], $aInput_NUM4[10], $aLabel_Count2[10]
;~ Global $COUNT[10]

Global $aInput_NUM1[10][3], $aLabel_Count1[10]

#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][0] = GUICtrlCreateInput("1", 16, 24 + $i * 24, 41, 21)
        $aInput_NUM1[$i][1] = GUICtrlCreateInput("0", 64, 24 + $i * 24, 41, 21)
        $aInput_NUM1[$i][2] = GUICtrlCreateLabel("0", 112, 24 + $i * 24, 36, 17)
        
        GUICtrlCreateUpdown($aInput_NUM1[$i][0])
        GUICtrlSetLimit(-1, 30, 1)
        
        GUICtrlCreateUpdown($aInput_NUM1[$i][1])
        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][2],GUICtrlRead($aInput_NUM1[$index][0])*GUICtrlRead($aInput_NUM1[$index][1]))
                Else
                        $index=_ArraySearch($aInput_NUM1,$iIDFrom,0,0,0,0,1,1)
                        If Not @error Then GUICtrlSetData($aInput_NUM1[$index][2],GUICtrlRead($aInput_NUM1[$index][0])*GUICtrlRead($aInput_NUM1[$index][1]))
                EndIf
        EndIf
EndFunc   ;==>WM_COMMAND

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2011-12-19 14:18:53 | 显示全部楼层
2分钟前还没答案的 支持3mile 学习一下
 楼主| 发表于 2011-12-21 00:25:00 | 显示全部楼层
回复 12# 3mile


    没接触过字典这个概念,我还是老老实实用数组搜索比较实在,只是代码要用很多了。。
发表于 2011-12-24 09:52:23 | 显示全部楼层
呵呵,学习一下哈。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 22:52 , Processed in 0.101187 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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