找回密码
 加入
搜索
查看: 9448|回复: 15

[AU3基础] 如何判断A按钮按下还是B按钮按下的??共享一个CASE语法判断两个按钮!![已解决]

 火.. [复制链接]
发表于 2015-2-27 23:11:17 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2015-2-28 14:07 编辑

本来这个问题 是要问
再 共享一个 CASE语法判断下  如何判断A按钮按下还是B按钮按下的???

程序 语法如下:
$WinSYSsub = GuiCreate('',640,480,-1,-1,-1,-1)

$A1 = GuiCtrlCreateButton('A', 50, 45, 80, 80); 
$B1 = GuiCtrlCreateButton('B', 270, 45, 80, 80); 

GUISetState()
        
While 1
        Switch guigetmsg()
                Case -3
                        Exit


                Case $A1 or $B1

                        MsgBox(0,"PUSH","PUSH")

        EndSwitch

WEnd


再写这个例子的时候 却发现了 另外一个不解的 问题

请看附图



范例中 我并没有按下任何的按钮  但是 讯息一直弹出来 这是为何呢??
求高手 解说

问题一:  为何 上面那段范例  没有按下任何按钮 却会造成 MSGBOX 一直弹出?? 如何避免??
问题二:  如上范例 使用 CASE  $A1  or  $B1  的方法 如何判断是 A按钮按下 还是 B按钮按下

本帖子中包含更多资源

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

×
发表于 2015-2-27 23:55:26 | 显示全部楼层
Case $A1

                        MsgBox(0,"PUSH","$A1 PUSH")
                 Case $B1
                        MsgBox(0,"PUSH","$B1 PUSH")
 楼主| 发表于 2015-2-28 00:00:32 | 显示全部楼层
回复 2# netegg
    這個方法我知道

但是 如果我就是不要分成兩個??

一定要用
CASE  $A1 OR $B1  的方法去判斷呢??

因為  
CASE  $A1 OR $B1  底下 有幾千行的程式  A按鈕 與 B按鈕 要出叫出 同一個GUI ,但是我需要判定 是 A呼叫的 還是 B 呼叫的
发表于 2015-2-28 00:06:33 | 显示全部楼层
回复 3# kk_lee69
$WinSYSsub = GuiCreate('',640,480,-1,-1,-1,-1)



$A1 = GuiCtrlCreateButton('A', 50, 45, 80, 80);

$B1 = GuiCtrlCreateButton('B', 270, 45, 80, 80);



GUISetState()

      

While 1
       $msg = guigetmsg()
        Switch $msg

                Case -3

                        Exit





                Case $A1



                        push($msg)

                Case $B1

                        push($msg)
        EndSwitch



WEnd
Func push($msg)
        MsgBox(0,0,$msg)
endfunc
发表于 2015-2-28 00:15:02 | 显示全部楼层
本帖最后由 netegg 于 2015-2-28 00:19 编辑

要是用一个可能也行,case or底下还有加一行guictrlread,不行,只有b按得到,估计换个建立顺序,就是一直a先按倒了
 楼主| 发表于 2015-2-28 00:49:10 | 显示全部楼层
回复 5# netegg

剛剛自己拿範例 上面的方式改了一下 有改到一個 看起來是OK 的 但是 不知道原理有何不同??

為什麼採用這樣的方式就會一切 OK 而且也不會自動彈出
$WinSYSsub = GuiCreate('',640,480,-1,-1,-1,-1)
$A1 = GuiCtrlCreateButton('A', 50, 45, 80, 80); 
$B1 = GuiCtrlCreateButton('B', 270, 45, 80, 80); 
GUISetState()
While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = -3
                ExitLoop
            Case $msg = $A1 or $msg = $B1
                                If $msg = $A1 Then
                                MsgBox(0,"","")
                                EndIf
        EndSelect
WEnd


為何使用 SWITCH 語法 有問題 但是用 SELECT  就不會有問題??
发表于 2015-2-28 05:07:42 | 显示全部楼层
[au3]$WinSYSsub = GuiCreate('',640,480,-1,-1,-1,-1)
$A1 = GuiCtrlCreateButton('A', 50, 45, 80, 80);
$B1 = GuiCtrlCreateButton('B', 270, 45, 80, 80);
GUISetState()
While 1
        $msg = GUIGetMsg()
         Switch $msg
            Case  -3
                ExitLoop
            Case $A1, $B1
                              
                                MsgBox(0,"",GUICtrlRead($msg))
        EndSwitch
WEnd
[/au3]
发表于 2015-2-28 09:25:06 | 显示全部楼层
蛋神威武  ~~  case or 这个用法,我用也是不行,既然是用or了,那么就不如用蛋蛋说的这种方法
case $a1, $b1      这个是正解~
发表于 2015-2-28 09:49:09 | 显示全部楼层
回复 6# kk_lee69


    If no cases match the Switch value, then the Case Else section, if present, is executed. If no cases match and Case Else is not defined, then none of the code inside the Switch structure will be executed.


  使用switch 最好加一个case else ,因为无匹配会执行case所有代码
发表于 2015-2-28 09:54:48 | 显示全部楼层
select 即使多个满足条件 也是执行第一个
 楼主| 发表于 2015-2-28 14:06:22 | 显示全部楼层
回复 7# netegg

原來 可以這樣用呀  了解了 感謝!!


另外 再提供一個 想到的解法

$Check=0
$WinSYSsub = GuiCreate('',640,480,-1,-1,-1,-1)
$A1 = GuiCtrlCreateButton('A', 50, 45, 80, 80); 
$B1 = GuiCtrlCreateButton('B', 270, 45, 80, 80); 
GUISetState()
While 1
        Switch GUIGetMsg()
            Case  -3
                ExitLoop
                                
            Case  $A1 
                                IF $Check=1 Then
                                        MsgBox(0,"","B")
                                Else
                                        MsgBox(0,"","A")
                                EndIf
                                $Check=0

                        CASE  $B1
                                $Check=1
                                ControlClick("","",$A1)
                                
        EndSwitch
WEnd


感謝各位的幫忙!!
发表于 2015-2-28 15:46:43 | 显示全部楼层
本帖最后由 netegg 于 2015-2-28 15:52 编辑

回复 9# ap112

错,case是顺序执行的,即使没有匹配项也会从头到尾执行一遍,只是在第一个符合条件的时候执行完退出switch/select,加了case else等于画蛇添足,除非在所有前面的case都不符合时候有具体别的操作,否则switch/select是自动结束的

其实更明确点说,switch和select是两个东西,一个是判断语句,一个是条件语句
发表于 2015-2-28 16:10:49 | 显示全部楼层
回复 12# netegg


    蛋大,这个帮助文档里面的
If no cases match the Switch value, then the Case Else section, if present, is executed. If no cases match and Case Else is not defined, then none of the code inside the Switch structure will be executed.

什么意思呀?
发表于 2015-2-28 16:23:58 | 显示全部楼层
如果没有匹配switch的值,且提供case else选项时执行其下的,如果没有case匹配且未定义case else那么不执行switch结构中的任何代码
发表于 2015-2-28 20:19:35 | 显示全部楼层
$A1 or $B1这个表达式会返回TRUE,改成$A1, $B1试试(把or改为逗号)。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 16:19 , Processed in 0.218505 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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