找回密码
 加入
搜索
查看: 1975|回复: 7

[GUI管理] [已解决]请教大神关于Func放到GUI里就不能执行的问题

  [复制链接]
发表于 2016-6-24 10:08:01 | 显示全部楼层 |阅读模式
本帖最后由 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[0][$i],$infoarr[1][$i],$infoarr[2][$i]]
                              ;msgbox(0,"",UBound($infoarr,2))
                                  ;_ArrayDisplay($strarray,"")
                                                          $str = $strarray[1]
                                              ;                  $os = StringMid($strarray[0],4,1)
                                               ;          $region = StringMid($str,7,1)
                                               ;          $Gcode = $strarray[2]
                                                          MsgBox(0,"",$str)
                                                          Check()
                                                          ;MsgBox(0,"","checked")
                        Next

        EndSwitch
WEnd

Func open()
....
EndFunc

Func Check()  ;MsgBox(0,"",UBound($arr,2))
   Dim $result[UBound($arr,1)][UBound($arr,2)]
   ;_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的机制问题造成的,还请大神不吝赐教。多谢!
发表于 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[0][$i],$infoarr[1][$i],$infoarr[2][$i]]
          ;msgbox(0,"",UBound($infoarr,2))-------------这能显示?--2
          ;_ArrayDisplay($strarray,"")-------------这能显示?--3
           $str = $strarray[1]
   ;       $os = StringMid($strarray[0],4,1)
   ;       $region = StringMid($str,7,1)
;          $Gcode = $strarray[2]
            MsgBox(0,"",$str)-------------这能显示?--1
            Check()
            ;MsgBox(0,"","checked")-------------这能显示?--4
      Next

Func Check()  ;MsgBox(0,"",UBound($arr,2))
   MsgBox(0,"","这能显示?")-------------这能显示?--5
   Dim $result[UBound($arr,1)][UBound($arr,2)]
   ;_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
发表于 2016-6-24 10:32:43 | 显示全部楼层
回复 2# chzj589

我覺得是有執行 CHECK() 的

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

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

看看會不會執行不就知道
 楼主| 发表于 2016-6-24 10:36:19 | 显示全部楼层
回复 2# chzj589

大神你好啊
是的,因为有问题我才把每一步都加了输出显示,我刚才又把注释拿掉,1、2、3、4项全部都能循环输出而且是正确的。但是就是check内部命令貌似没有执行,MsgBox(0,"",$n+1 & " " & $l+2)这个就没有输出,而且没有报错。
发表于 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[UBound($arr,1)][UBound($arr,2)]
   ;_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
 楼主| 发表于 2016-6-24 11:11:59 | 显示全部楼层
多谢,各位大神指导。真不好意思,让你们浪费时间了。
是个乌龙我日,因为在我获取$str的时候没有做去空格处理。。。保存$str的excel里面有最后一位有空格。。。
然后你们懂得,msgbox的东西都看上去是正确的,但是参数多了空格程序只是找不到对应的值所以,执行程序段外面这个if就出去了。
If StringReplace($arr[$l][$n]," ","") = $str Then
                                  MsgBox(0,"",$n+1 & " " & $l+2)
                                  执行程序段....
EndIf

我是每一行都加了msg之后才调试出来的OMG。
现在这个帖子的主题就没意义了,但这个事儿还有点启示意义,让新手懂得如何发现错误;输入的数据一定要做格式处理。
那么新问题来了,这贴我要怎么处理呢?
发表于 2016-6-24 11:23:39 | 显示全部楼层
回复 6# shaluoshuxia

标题修改[己解决]
 楼主| 发表于 2016-6-24 11:40:26 | 显示全部楼层
@chzj589, @kk_lee69

再次感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-18 16:51 , Processed in 0.078181 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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