shaluoshuxia 发表于 2016-6-24 10:08:01

[已解决]请教大神关于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:20:02

本帖最后由 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

kk_lee69 发表于 2016-6-24 10:32:43

回复 2# chzj589

我覺得是有執行 CHECK() 的

只是裡面的判斷 在陣列出問題 導致 那個無法執行

最簡單 應該在 CHECK()的一開頭
直接 MSGBOX不管判斷

看看會不會執行不就知道

shaluoshuxia 发表于 2016-6-24 10:36:19

回复 2# chzj589

{:face (427):}大神你好啊
是的,因为有问题我才把每一步都加了输出显示,我刚才又把注释拿掉,1、2、3、4项全部都能循环输出而且是正确的。但是就是check内部命令貌似没有执行,MsgBox(0,"",$n+1 & " " & $l+2)这个就没有输出,而且没有报错。{:face (207):}

chzj589 发表于 2016-6-24 10:37:44

本帖最后由 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

shaluoshuxia 发表于 2016-6-24 11:11:59

多谢,各位大神指导。真不好意思,让你们浪费时间了。{:face (52):}
是个乌龙我日,因为在我获取$str的时候没有做去空格处理。。。保存$str的excel里面有最后一位有空格。。。
然后你们懂得,msgbox的东西都看上去是正确的,但是参数多了空格程序只是找不到对应的值所以,执行程序段外面这个if就出去了。
If StringReplace($arr[$l][$n]," ","") = $str Then
                                  MsgBox(0,"",$n+1 & " " & $l+2)
                                  执行程序段....
EndIf

我是每一行都加了msg之后才调试出来的OMG。
现在这个帖子的主题就没意义了,但这个事儿还有点启示意义,让新手懂得如何发现错误;输入的数据一定要做格式处理。
那么新问题来了,这贴我要怎么处理呢?

chzj589 发表于 2016-6-24 11:23:39

回复 6# shaluoshuxia

标题修改[己解决]{:face (327):}

shaluoshuxia 发表于 2016-6-24 11:40:26

@chzj589, @kk_lee69

再次感谢!
页: [1]
查看完整版本: [已解决]请教大神关于Func放到GUI里就不能执行的问题