yarsye 发表于 2010-9-4 00:28:51

(已解决)能不能选择哪个就执行哪个函数?

本帖最后由 yarsye 于 2010-9-4 13:25 编辑

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
        Local $msg
        GUICreate("My GUI combo"); will create a dialog box that when displayed is centered

        GUICtrlCreateCombo("item1", 10, 10) ; create first item
        GUICtrlSetData(-1, "item2|item3", "item3") ; add other item snd set a new default

        GUISetState()

        ; Run the GUI until the dialog is closed
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $label0;x
                        Exit
                Case item2 ;Start
                        item2()
        EndSwitch
WEnd
EndFunc   ;==>Example

Func item2()
        MsgBox(0,1,1)
EndFunc

pusofalse 发表于 2010-9-4 00:34:23

表驱动Call函数。

republican 发表于 2010-9-4 05:59:09

P版的理解能力很强大!

call也不行吧,控件ID与名称没有关系。

我估计LZ是想省事点。

要么自己定义ID与名称间的对应关系,到时可以直接Call或Execute.

要么还是乖乖的写吧。

两者的工作量其实是差不多的,所以我建议LZ还是选后者。

yarsye 发表于 2010-9-4 09:22:40

还是用ID试下吧 祝我好运

afan 发表于 2010-9-4 10:31:03

GUICreate('', 220, 190)
$Combo1 = GUICtrlCreateCombo('', 20, 10, 180, 25, 0x0003)
GUICtrlSetData(-1, '请选择|a|b|c', '请选择')
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Combo1
                        Call(GUICtrlRead(3))
        EndSwitch
WEnd

Func a()
        MsgBox(0, 0, '执行a()')
EndFunc   ;==>a
Func b()
        MsgBox(0, 0, '执行b()')
EndFunc   ;==>b
Func c()
        MsgBox(0, 0, '执行c()')
EndFunc   ;==>c

afan 发表于 2010-9-4 10:38:17

本帖最后由 afan 于 2010-9-4 10:41 编辑

GUICreate('', 220, 190)
$Combo1 = GUICtrlCreateCombo('', 20, 10, 180, 25, 0x0003)
GUICtrlSetData(-1, '请选择|a|b|c', '请选择')
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Combo1
                        Go(GUICtrlRead(3))
        EndSwitch
WEnd

Func Go($Name)
        Switch $Name
                Case 'a'
                        MsgBox(0, 0, '执行a')
                Case 'b'
                        MsgBox(0, 0, '执行b')
                Case 'c'
                        MsgBox(0, 0, '执行c')
        EndSwitch
EndFunc   ;==>Go

yarsye 发表于 2010-9-4 12:25:22

回复 6# afan #include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
    Local $msg , $Combo ,$a
    GUICreate("My GUI combo"); 创建一个对话框,并居中显示

   $Combo = GUICtrlCreateCombo("item1", 10, 10) ; 创建一个组合列表框(ComboBox)控件
    GUICtrlSetData($Combo , "item2|item3", "item3") ; 在列表框中添加新的项目,并设置一个新的默认值

    GUISetState()
$a = GUICtrlRead($Combo)
;~MsgBox(0,1,$a)
    ; 运行界面,直到窗口被关闭
    While 1
      $msg = GUIGetMsg()
      
      If $msg = $GUI_EVENT_CLOSE Then ExitLoop
                If $a = "item2" Then MsgBox(0,1,1,5)

    WEnd
EndFunc   ;==>Example为什么这样不行?如果我用GUICtrlRead($Combo)代替$a的话 可以了 但是新问题又出现了 每次我一点击下拉菜单 就弹出来 不是我要的效果选择item2 才出msg
请问 老大 这该如何解决?纠结中

yarsye 发表于 2010-9-4 12:26:21

回复 6# afan


    对了 你代码Highlight是怎么用出来的? 高亮显示好帅啊

afan 发表于 2010-9-4 12:28:53

GUICtrlRead($Combo) 没在循环中
帖子工具栏右边有个A

yarsye 发表于 2010-9-4 12:40:35

510709746回复 9# afan #include <GUIConstantsEx.au3>#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
        Global $Checkbox_Name_1 = "Checkbox1"
        Global $Checkbox_Name_2 = "Checkbox2"
        Global $Checkbox_Name_3 = "Checkbox3"
        Global $Checkbox1, $Checkbox2, $Checkbox3
        Local $msg, $Combo, $a
        GUICreate("My GUI combo") ; 创建一个对话框,并居中显示

        $Combo = GUICtrlCreateCombo("item1", 10, 10) ; 创建一个组合列表框(ComboBox)控件
        GUICtrlSetData($Combo, "item2|item3", "item3") ; 在列表框中添加新的项目,并设置一个新的默认值
        $Checkbox1 = GUICtrlCreateCheckbox($Checkbox_Name_1, 112, 232, 97, 17)
        $Checkbox2 = GUICtrlCreateCheckbox($Checkbox_Name_2, 112, 312, 97, 17)
        $Checkbox3 = GUICtrlCreateCheckbox($Checkbox_Name_3, 112, 352, 97, 17)
        GUISetState()
        $a = GUICtrlRead($Combo)
;~MsgBox(0,1,$a)
        ; 运行界面,直到窗口被关闭
        While 1
                $msg = GUIGetMsg()

                If $msg = $GUI_EVENT_CLOSE Then ExitLoop
                If GUICtrlRead($Combo) = "item2" Then GUICtrlSetState($Checkbox3, $GUI_DISABLE)



        WEnd
EndFunc   ;==>Example其实我想要的是GUICtrlRead($Combo) = "item2" Then GUICtrlSetState($Checkbox3, $GUI_DISABLE)
只要一点击下拉菜单 checkbox3 就disable了 而此时我再点回去已经不行了
这样症状还有得救吗?

yarsye 发表于 2010-9-4 13:02:48

#include <GUIConstantsEx.au3>

;~ Opt('MustDeclareVars', 1)
        Global $Checkbox_Name_1 = "Checkbox1"
        Global $Checkbox_Name_2 = "Checkbox2"
        Global $Checkbox_Name_3 = "Checkbox3"
        Global $Checkbox1, $Checkbox2, $Checkbox3
        Global $msg, $Combo, $a
Example()

Func Example()

        GUICreate("My GUI combo") ; 创建一个对话框,并居中显示

        $Combo = GUICtrlCreateCombo("item1", 10, 10) ; 创建一个组合列表框(ComboBox)控件
        GUICtrlSetData($Combo, "item2|item3", "item3") ; 在列表框中添加新的项目,并设置一个新的默认值
        $Checkbox1 = GUICtrlCreateCheckbox($Checkbox_Name_1, 112, 232, 97, 17)
        $Checkbox2 = GUICtrlCreateCheckbox($Checkbox_Name_2, 112, 312, 97, 17)
        $Checkbox3 = GUICtrlCreateCheckbox($Checkbox_Name_3, 112, 352, 97, 17)
        GUISetState()
        $a = GUICtrlRead($Combo)
;~MsgBox(0,1,$a)
        ; 运行界面,直到窗口被关闭
       
While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case -3
                        Exit
                Case $Combo
                        Go(GUICtrlRead(3))
      EndSwitch

        WEnd
EndFunc   ;==>Example
Func Go($Name)
      Switch $Name
                Case 'item1'
                     GUICtrlSetState($Checkbox1, $GUI_DISABLE)
                                             GUICtrlSetState($Checkbox2, $GUI_ENABLE)
                Case 'item2'
                        GUICtrlSetState($Checkbox2, $GUI_DISABLE)
                                                   GUICtrlSetState($Checkbox1, $GUI_ENABLE)
                Case 'item3'
                      GUICtrlSetState($Checkbox3, $GUI_DISABLE)
      EndSwitch
EndFunc   ;==>Go回复 10# yarsye

好像这样就可以了

yarsye 发表于 2010-9-4 13:07:15

晕!被我自己征服了 还是不行 checkbox会一直不停的在闪 这又是个问题

yarsye 发表于 2010-9-4 13:18:25

回复 6# afan Func Go($Name)
      Switch $Name
                Case 'item1'
                     GUICtrlSetState($Checkbox1, $GUI_DISABLE)
                                             GUICtrlSetState($Checkbox2, $GUI_ENABLE)
                Case 'item2'
                        GUICtrlSetState($Checkbox2, $GUI_DISABLE)
                                                   GUICtrlSetState($Checkbox1, $GUI_ENABLE)
                Case 'item3'
                      GUICtrlSetState($Checkbox3, $GUI_DISABLE)
      EndSwitch
EndFunc   ;==>Go

能不能让checkbox不闪AND选择item1后checkbox就消失?

yarsye 发表于 2010-9-4 13:19:19

回复 13# yarsye


    老大 你那个高亮代码不会是一行一行复制进去的吧?

afan 发表于 2010-9-4 13:39:50

你也算是老会员了吧,例子都给你了两个,不会稍微变通下吗…
#include <GUIConstantsEx.au3>

Global $Checkbox_Name_1 = "Checkbox1"
Global $Checkbox_Name_2 = "Checkbox2"
Global $Checkbox_Name_3 = "Checkbox3"
Global $Checkbox1, $Checkbox2, $Checkbox3, $Combo, $Name, $nMsg

GUICreate("My GUI combo") ; 创建一个对话框,并居中显示

$Combo = GUICtrlCreateCombo("item1", 10, 10) ; 创建一个组合列表框(ComboBox)控件
GUICtrlSetData($Combo, "item2|item3", "item3") ; 在列表框中添加新的项目,并设置一个新的默认值
$Checkbox1 = GUICtrlCreateCheckbox($Checkbox_Name_1, 112, 232, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox($Checkbox_Name_2, 112, 312, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox($Checkbox_Name_3, 112, 352, 97, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Combo
                        Go(StringRight(GUICtrlRead($Combo), 1))
        EndSwitch

WEnd

Func Go($Name)
        For $i = 1 To 3
                If $Name = $i Then
                        GUICtrlSetState(Eval('Checkbox' & $i), $GUI_DISABLE)
                Else
                        GUICtrlSetState(Eval('Checkbox' & $i), $GUI_ENABLE)
                EndIf
        Next
EndFunc   ;==>Go
页: [1] 2
查看完整版本: (已解决)能不能选择哪个就执行哪个函数?