找回密码
 加入
搜索
查看: 7300|回复: 1

[GUI管理] 如何让事件模式下的不同控件的事件连续触发?

[复制链接]
发表于 2013-8-9 10:39:46 | 显示全部楼层 |阅读模式
在事件模式下,比如有三个控件:文本框,按钮1,按钮2。按钮2初始是禁用的。
文本框的事件:当文本框中有输入文本后,按钮2被激活。
按钮1的事件:向文本框内设置文本。

希望的效果是按钮1的事件触发后由于文本框满足条件会触发文本框的事件,想要这样的效果只能再在按钮1的事件方法中加入激活按钮2的动作。这样感觉代码很冗余,有没有什么别的方法不在按钮1的事件中添加激活按钮2的动作就能够让这两个事件连续触发,类似于多米诺那样。
发表于 2013-8-9 22:40:24 | 显示全部楼层
本帖最后由 fangbaiyu 于 2013-8-9 22:50 编辑

鄙人语文很差 看了LZ的问题 很凌乱
乱写了一通  LZ看看 是不是你想要的效果
例一:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gu_hMainForm = GUICreate("", 200, 300)
Global $gu_nEdit = GUICtrlCreateEdit("", 10, 10, 180, 220)
Global $gu_nButton1 = GUICtrlCreateButton("Button1", 30, 250, 50, 30)
Global $gu_nButton2 = GUICtrlCreateButton("Button2", 110, 250, 50, 30)
Global $gu_hEdit = GUICtrlGetHandle($gu_nEdit)
GUICtrlSetOnEvent($gu_nButton1, "_MY_EVENT")
GUICtrlSetOnEvent($gu_nEdit, "_MY_EVENT")
GUISetOnEvent($GUI_EVENT_CLOSE, "_MY_EVENT")
GUICtrlSetState($gu_nButton2, $GUI_DISABLE)
GUISetState(@SW_SHOW)

While 1
        Sleep(10)
WEnd
GUIDelete()
Exit

Func _MY_EVENT()
        Local $t_bVar
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $gu_nButton1
                        $t_bVar = GUICtrlSetData($gu_nEdit, "Test", 1)
                        If $t_bVar Then _SendMessage($gu_hMainForm, $WM_COMMAND, $EN_CHANGE, 0)
                Case $gu_nEdit
                        GUICtrlSetState($gu_nButton2, $GUI_ENABLE)
        EndSwitch
EndFunc
例二:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gu_hMainForm = GUICreate("", 200, 300)
Global $gu_nEdit = GUICtrlCreateEdit("", 10, 10, 180, 220)
Global $gu_nButton1 = GUICtrlCreateButton("Button1", 30, 250, 50, 30)
Global $gu_nButton2 = GUICtrlCreateButton("Button2", 110, 250, 50, 30)
Global $gu_hEdit = GUICtrlGetHandle($gu_nEdit)
GUICtrlSetOnEvent($gu_nButton1, "_MY_EVENT")
GUICtrlSetOnEvent($gu_nEdit, "_MY_EVENT")
GUISetOnEvent($GUI_EVENT_CLOSE, "_MY_EVENT")
GUICtrlSetState($gu_nButton2, $GUI_DISABLE)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

While 1
        Sleep(10)
WEnd
GUIDelete()
Exit

Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        Local $wNotifyCode = BitShift($wParam, 16)
        Local $wID = BitAND($wParam, 0x0000FFFF)
        Local $hWndCtrl = $lParam
        Switch $hWndCtrl
                Case $gu_hEdit
                        Switch $wNotifyCode
                                Case $EN_UPDATE
                                        GUICtrlSetState($gu_nButton2, $GUI_ENABLE)
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc

Func _MY_EVENT()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $gu_nButton1
                        GUICtrlSetData($gu_nEdit, "Test", 1)
        EndSwitch
EndFunc 
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 22:09 , Processed in 0.071646 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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