找回密码
 加入
搜索
查看: 8549|回复: 19

[AU3基础] (已解决)能不能选择哪个就执行哪个函数?

  [复制链接]
发表于 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

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-9-4 00:34:23 | 显示全部楼层
表驱动Call函数。
发表于 2010-9-4 05:59:09 | 显示全部楼层
P版的理解能力很强大!

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

我估计LZ是想省事点。

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

要么还是乖乖的写吧。

两者的工作量其实是差不多的,所以我建议LZ还是选后者。
 楼主| 发表于 2010-9-4 09:22:40 | 显示全部楼层
还是用ID试下吧 祝我好运
发表于 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

评分

参与人数 1金钱 +30 收起 理由
水木子 + 30 学习啦!

查看全部评分

发表于 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
 楼主| 发表于 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
请问 老大 这该如何解决?纠结中
 楼主| 发表于 2010-9-4 12:26:21 | 显示全部楼层
回复 6# afan


    对了 你代码Highlight是怎么用出来的? 高亮显示好帅啊
发表于 2010-9-4 12:28:53 | 显示全部楼层
GUICtrlRead($Combo) 没在循环中
帖子工具栏右边有个A
 楼主| 发表于 2010-9-4 12:40:35 | 显示全部楼层
回复 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了 而此时我再点回去已经不行了
这样症状还有得救吗?
 楼主| 发表于 2010-9-4 13:02:48 | 显示全部楼层
[au3]#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[/au3]
回复 10# yarsye

好像这样就可以了
 楼主| 发表于 2010-9-4 13:07:15 | 显示全部楼层
晕!被我自己征服了 还是不行 checkbox会一直不停的在闪 这又是个问题
 楼主| 发表于 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就消失?
 楼主| 发表于 2010-9-4 13:19:19 | 显示全部楼层
回复 13# yarsye


    老大 你那个高亮代码不会是一行一行复制进去的吧?
发表于 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 08:31 , Processed in 0.117020 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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