kk_lee69 发表于 2015-2-27 23:11:17

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

本帖最后由 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$A1or$B1的方法 如何判断是 A按钮按下 还是 B按钮按下

netegg 发表于 2015-2-27 23:55:26

Case $A1

                        MsgBox(0,"PUSH","$A1 PUSH")
               Case $B1
                        MsgBox(0,"PUSH","$B1 PUSH")

kk_lee69 发表于 2015-2-28 00:00:32

回复 2# netegg
    這個方法我知道

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

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

因為
CASE$A1 OR $B1底下 有幾千行的程式A按鈕 與 B按鈕 要出叫出 同一個GUI ,但是我需要判定 是 A呼叫的 還是 B 呼叫的

netegg 发表于 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

netegg 发表于 2015-2-28 00:15:02

本帖最后由 netegg 于 2015-2-28 00:19 编辑

要是用一个可能也行,case or底下还有加一行guictrlread,不行,只有b按得到,估计换个建立顺序,就是一直a先按倒了

kk_lee69 发表于 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就不會有問題??

netegg 发表于 2015-2-28 05:07:42

$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

austere 发表于 2015-2-28 09:25:06

蛋神威武~~case or 这个用法,我用也是不行,既然是用or了,那么就不如用蛋蛋说的这种方法
case $a1, $b1      这个是正解~

ap112 发表于 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所有代码

ap112 发表于 2015-2-28 09:54:48

select 即使多个满足条件 也是执行第一个

kk_lee69 发表于 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

感謝各位的幫忙!!

netegg 发表于 2015-2-28 15:46:43

本帖最后由 netegg 于 2015-2-28 15:52 编辑

回复 9# ap112

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

其实更明确点说,switch和select是两个东西,一个是判断语句,一个是条件语句

ap112 发表于 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.

什么意思呀?

netegg 发表于 2015-2-28 16:23:58

如果没有匹配switch的值,且提供case else选项时执行其下的,如果没有case匹配且未定义case else那么不执行switch结构中的任何代码

pusofalse 发表于 2015-2-28 20:19:35

$A1 or $B1这个表达式会返回TRUE,改成$A1, $B1试试(把or改为逗号)。
页: [1] 2
查看完整版本: 如何判断A按钮按下还是B按钮按下的??共享一个CASE语法判断两个按钮!![已解决]