找回密码
 加入
搜索
查看: 1816|回复: 5

[GUI管理] oneventmade注册问题

[复制链接]
发表于 2016-10-14 08:26:06 | 显示全部楼层 |阅读模式
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <constants.au3>
#include <ComboConstants.au3>
Opt("GUIOnEventMode", 1)
Dim $Form2,$Form3,$Form4,$Form2_Button2,$Form3_Button1,$Form4_Combo1,$Form4_Button1
$Form1=GUICreate("测试", 615, 80, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
$Form1_Button1 = GUICtrlCreateButton("显示窗口1", 0, 0, 73, 57)
$Form1_Button2 = GUICtrlCreateButton("显示窗口2", 80, 0, 73, 57)
$Form1_Button3 = GUICtrlCreateButton("显示窗口3", 160, 0, 73, 57)
GUICtrlSetOnEvent($Form1_Button1, "main")
GUICtrlSetOnEvent($Form1_Button2, "main")
GUICtrlSetOnEvent($Form1_Button3, "main");注册按钮点击消息到自定义函数main 里面进行处理
GUISetState(@SW_SHOW)
While 1
        Sleep(3000)
WEnd
Func main()
        Switch @GUI_CtrlId;根据宏@GUI_CtrlId 来判断消息
                Case $GUI_EVENT_CLOSE
                                Switch @GUI_WinHandle;根据宏@GUI_WinHandle 来判断产生关闭消息的窗口消息
                                        Case $Form1
                                                Exit
                                        Case $Form2
                                                GUIDelete($Form2)
                                                GUISetState(@SW_SHOW,$Form1)
                                        Case $Form3
                                                GUIDelete($Form3)
                                                GUISetState(@SW_SHOW,$Form1)
                                        Case $Form4
                                                GUIDelete($Form4)
                                                GUISetState(@SW_SHOW,$Form1)                
                                EndSwitch
                Case $Form1_Button1
                        GUISetState(@SW_HIDE,$Form1)
                        _IPSM()
                Case $Form2_Button2
                                MsgBox(0,"","你点的是窗口1的按钮")                
                Case $Form1_Button2
                        GUISetState(@SW_HIDE,$Form1)
                        _IEPZ()        
                Case $Form3_Button1
                        MsgBox(0,"","我是窗口2的按钮")
                Case $Form1_Button3
                        GUISetState(@SW_HIDE,$Form1)
                        _PRINTGZ()        
                Case $Form4_Combo1
                                MsgBox(0,"","222222")
                Case $Form4_Button1
                        MsgBox(0,"","我是窗口3的按钮")
        EndSwitch                
                        
EndFunc
Func _PRINTGZ()
        $Form4 = GUICreate("窗口3", 388, 79, 507, 443)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form4_Combo1 = GUICtrlCreateCombo("1|2|3", 120, 32, 170, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
        GUICtrlSetOnEvent($Form4_Combo1, "main")
        $Form4_Button1 = GUICtrlCreateButton("我是窗口3按钮", 296, 32, 65, 25)
        GUICtrlSetOnEvent($Form4_Button1, "main")
GUISetState(@SW_SHOW)
EndFunc        
Func _IEPZ()
        $Form3 = GUICreate("窗口2", 428, 400, 259, 376,-1,-1,$Form1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form3_Button1 = GUICtrlCreateButton("窗口2按钮", 320, 24, 81, 25)
        GUICtrlSetOnEvent($Form3_Button1, "main")
        GUISetState(@SW_SHOW)
EndFunc
Func _IPSM()
        $Form2= GUICreate("窗口1", 844, 516, 217, 174,-1,-1,$Form1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form2_Button2 = GUICtrlCreateButton("我是窗口1的按钮", 664, 24, 73, 33)
        GUICtrlSetOnEvent($Form2_Button2, "main")
        GUISetState(@SW_SHOW)
EndFunc                        
只要打开了窗口1,窗口2,那么窗口3的控件就会报错,回去执行窗口2按钮的语句,为啥,请大神帮忙看看
 楼主| 发表于 2016-10-14 08:27:54 | 显示全部楼层
大神帮忙看看,问题在哪里,我看了都正常的。但是只要打开过窗口1或窗口2,那么窗口3的¥Form4_Combo1 控件就执行出错,去执行窗口2的按钮
发表于 2016-10-14 09:42:27 | 显示全部楼层
本帖最后由 kk_lee69 于 2016-10-14 09:46 编辑

回复 2# babicy

問題解決了

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <constants.au3>
#include <ComboConstants.au3>
Opt("GUIOnEventMode", 1)
Dim $Form2,$Form3,$Form4,$Form2_Button2,$Form3_Button1,$Form4_Combo1,$Form4_Button1
$Form1=GUICreate("測試", 615, 80, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
$Form1_Button1 = GUICtrlCreateButton("顯示視窗1", 0, 0, 73, 57)
$Form1_Button2 = GUICtrlCreateButton("顯示視窗2", 80, 0, 73, 57)
$Form1_Button3 = GUICtrlCreateButton("顯示視窗3", 160, 0, 73, 57)
GUICtrlSetOnEvent($Form1_Button1, "main")
GUICtrlSetOnEvent($Form1_Button2, "main")
GUICtrlSetOnEvent($Form1_Button3, "main");註冊按鈕點擊消息到自訂函數main 裡面進行處理
GUISetState(@SW_SHOW)
While 1
        Sleep(3000)
WEnd
Func main()
        Switch @GUI_CtrlId;根據巨集@GUI_CtrlId 來判斷消息
                Case $GUI_EVENT_CLOSE
                                Switch @GUI_WinHandle;根據巨集@GUI_WinHandle 來判斷產生關閉消息的視窗消息
                                        Case $Form1
                                                Exit
                                        Case $Form2
                                                GUIDelete($Form2)
                                                                                                $Form2_Button2=0
                                                GUISetState(@SW_SHOW,$Form1)
                                        Case $Form3
                                                GUIDelete($Form3)
                                                                                                $Form3_Button1=0
                                                GUISetState(@SW_SHOW,$Form1)
                                        Case $Form4
                                                GUIDelete($Form4)
                                                                                                $Form4_Combo1=0
                                                                                                $Form4_Button1=0
                                                GUISetState(@SW_SHOW,$Form1)                
                                EndSwitch
                Case $Form1_Button1
                        GUISetState(@SW_HIDE,$Form1)
                        _IPSM() ;1
                Case $Form2_Button2
                                MsgBox(0,"","你點的是視窗1的按鈕")                
                Case $Form1_Button2
                        GUISetState(@SW_HIDE,$Form1)
                        _IEPZ()        ;2
                Case $Form3_Button1
                        MsgBox(0,"","我是視窗2的按鈕")
                Case $Form1_Button3
                        GUISetState(@SW_HIDE,$Form1)
                        _PRINTGZ()        ;3
                Case $Form4_Combo1
                                MsgBox(0,"","222222")
                Case $Form4_Button1
                        MsgBox(0,"","我是視窗3的按鈕")
        EndSwitch                
                        
EndFunc
Func _PRINTGZ()
        $Form4 = GUICreate("窗口3", 388, 79, 507, 443)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form4_Combo1 = GUICtrlCreateCombo("1|2|3", 120, 32, 170, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
        GUICtrlSetOnEvent($Form4_Combo1, "main")
        $Form4_Button1 = GUICtrlCreateButton("我是視窗3按鈕", 296, 32, 65, 25)
        GUICtrlSetOnEvent($Form4_Button1, "main")
GUISetState(@SW_SHOW)
EndFunc        
Func _IEPZ()
        $Form3 = GUICreate("窗口2", 428, 400, 259, 376,-1,-1,$Form1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form3_Button1 = GUICtrlCreateButton("視窗2按鈕", 320, 24, 81, 25)
        GUICtrlSetOnEvent($Form3_Button1, "main")
        GUISetState(@SW_SHOW)
EndFunc
Func _IPSM()
        $Form2= GUICreate("窗口1", 844, 516, 217, 174,-1,-1,$Form1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "main")
        $Form2_Button2 = GUICtrlCreateButton("我是視窗1的按鈕", 664, 24, 73, 33)
        GUICtrlSetOnEvent($Form2_Button2, "main")
        GUISetState(@SW_SHOW)
EndFunc                        


原因是   你把  三個窗口 的  按鈕 放在一起 判斷

第一個窗口  第一個按鈕  產生控件 $Form2_Button2   系統假設 排定 給他  4
當你退出 這個窗口 $Form2_Button2  這個變數 還是 4

當你執行 第二個窗口  一樣產生 $Form3_Button1   這個 系統 一樣 給 4

按下後  因為你的 判斷都在一起   就會淺扯 你 寫的順序  因此  判斷到第一個窗口的按鈕
 楼主| 发表于 2016-10-14 09:50:53 | 显示全部楼层
非常感谢大神啊,学习了
发表于 2016-10-14 09:53:51 | 显示全部楼层
回复 4# babicy

另外方法

GUICtrlSetOnEvent($Form1_Button1, "main")


GUICtrlSetOnEvent($Form1_Button2, "main")


GUICtrlSetOnEvent($Form1_Button3, "main");註冊按鈕點擊消息到自訂函數main 裡面進行處理

者三個 不要註冊  同一個   分開 註冊
发表于 2016-10-14 10:00:29 | 显示全部楼层
回复 4# babicy

請看板規  問題解決了 要更改標題
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 08:11 , Processed in 0.076941 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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