[已解决]请教大神关于Func放到GUI里就不能执行的问题
本帖最后由 shaluoshuxia 于 2016-6-24 11:29 编辑第一次发帖,格式有可能不对还请大神耐心看一下,谢谢。
代码结构如下:
----GUICreate----
$hGui = ...
$Button = ...
;----GUICreate----
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
;msgbox(0,"",$BOMPath)
open()
For $i = 0 to UBound($infoarr,2)-1
local $strarray[] = [$infoarr[$i],$infoarr[$i],$infoarr[$i]]
;msgbox(0,"",UBound($infoarr,2))
;_ArrayDisplay($strarray,"")
$str = $strarray
; $os = StringMid($strarray,4,1)
; $region = StringMid($str,7,1)
; $Gcode = $strarray
MsgBox(0,"",$str)
Check()
;MsgBox(0,"","checked")
Next
EndSwitch
WEnd
Func open()
....
EndFunc
Func Check();MsgBox(0,"",UBound($arr,2))
Dim $result
;_ArrayDisplay($result,"")
For $n=0 To UBound($arr,2)-1
For $l=0 To UBound($arr,1)-1
If $arr[$l][$n]<>"" Then
If StringReplace($arr[$l][$n]," ","") = $str Then
MsgBox(0,"",$n+1 & " " & $l+2)
执行程序段....
EndIf
EndIf
Next
Next
EndFunc点击button后,程序运行,MsgBox(0,"",$str)循环显示,但是func check()不能执行, MsgBox(0,"",$n+1 & " " & $l+2)这段都没有输出。
我试过不加GUI直接给$str赋值数组,循环读取变量运行check(),这样是没问题的。
所以怀疑是GUI的机制问题造成的,还请大神不吝赐教。多谢! 本帖最后由 chzj589 于 2016-6-24 10:36 编辑
回复 1# shaluoshuxia
要查找原因:
Case $Button
;msgbox(0,"",$BOMPath)
open()
For $i = 0 to UBound($infoarr,2)-1
local $strarray[] = [$infoarr[$i],$infoarr[$i],$infoarr[$i]]
;msgbox(0,"",UBound($infoarr,2))-------------这能显示?--2
;_ArrayDisplay($strarray,"")-------------这能显示?--3
$str = $strarray
; $os = StringMid($strarray,4,1)
; $region = StringMid($str,7,1)
; $Gcode = $strarray
MsgBox(0,"",$str)-------------这能显示?--1
Check()
;MsgBox(0,"","checked")-------------这能显示?--4
Next
Func Check();MsgBox(0,"",UBound($arr,2))
MsgBox(0,"","这能显示?")-------------这能显示?--5
Dim $result
;_ArrayDisplay($result,"")
For $n=0 To UBound($arr,2)-1
For $l=0 To UBound($arr,1)-1
If $arr[$l][$n]<>"" Then
If StringReplace($arr[$l][$n]," ","") = $str Then
MsgBox(0,"",$n+1 & " " & $l+2)
执行程序段....
EndIf
EndIf
Next
Next
EndFunc 回复 2# chzj589
我覺得是有執行 CHECK() 的
只是裡面的判斷 在陣列出問題 導致 那個無法執行
最簡單 應該在 CHECK()的一開頭
直接 MSGBOX不管判斷
看看會不會執行不就知道 回复 2# chzj589
{:face (427):}大神你好啊
是的,因为有问题我才把每一步都加了输出显示,我刚才又把注释拿掉,1、2、3、4项全部都能循环输出而且是正确的。但是就是check内部命令貌似没有执行,MsgBox(0,"",$n+1 & " " & $l+2)这个就没有输出,而且没有报错。{:face (207):} 本帖最后由 chzj589 于 2016-6-24 10:50 编辑
回复 4# shaluoshuxia
Func Check();MsgBox(0,"",UBound($arr,2))
MsgBox(0,"","这能显示?")-------------这能显示?--5
Dim $arr-------------可能要全局变量?
Dim $result
;_ArrayDisplay($result,"")-------------这能显示?--6
For $n=0 To UBound($arr,2)-1
For $l=0 To UBound($arr,1)-1
If $arr[$l][$n]<>"" Then
If StringReplace($arr[$l][$n]," ","") = $str Then
MsgBox(0,"",$n+1 & " " & $l+2)
执行程序段....
EndIf
EndIf
Next
Next
EndFunc 多谢,各位大神指导。真不好意思,让你们浪费时间了。{:face (52):}
是个乌龙我日,因为在我获取$str的时候没有做去空格处理。。。保存$str的excel里面有最后一位有空格。。。
然后你们懂得,msgbox的东西都看上去是正确的,但是参数多了空格程序只是找不到对应的值所以,执行程序段外面这个if就出去了。
If StringReplace($arr[$l][$n]," ","") = $str Then
MsgBox(0,"",$n+1 & " " & $l+2)
执行程序段....
EndIf
我是每一行都加了msg之后才调试出来的OMG。
现在这个帖子的主题就没意义了,但这个事儿还有点启示意义,让新手懂得如何发现错误;输入的数据一定要做格式处理。
那么新问题来了,这贴我要怎么处理呢? 回复 6# shaluoshuxia
标题修改[己解决]{:face (327):} @chzj589, @kk_lee69
再次感谢!
页:
[1]