anythinging 发表于 2020-2-12 22:33:03

【已解决】关于新建创口中按钮出错的问题

本帖最后由 anythinging 于 2020-2-18 17:11 编辑

各位大师,想请教下,我想通过一个窗口控制显示和隐藏另一个窗口,如果使用func 现创建一个新窗口的话(不用func直接创建窗口2是正常的),新窗口中的按钮会出现错误,请教如何解决这个问题。感谢指点!
Global $form1,$ButtonA1,$ButtonA2,$form2,$ButtonB1,$ButtonB2

$form1 = GUICreate('1',200,200,800,400)
$ButtonA1 = GUICtrlCreateButton('显示窗口2',20,80,100,20)
$ButtonA2 = GUICtrlCreateButton('隐藏窗口2',20,110,100,20)
GUISetState(@SW_SHOW,$form1)


Func _CreatForm2()
$form2 = GUICreate('2',200,200,1200,400)
$ButtonB1 = GUICtrlCreateButton('B1',20,80,100,20)
$ButtonB2 = GUICtrlCreateButton('B2',20,80,100,20)
GUISetState(@SW_SHOW,$form2)
EndFunc




While 1
$msg=GUIGetMsg()
Switch $msg
Case -3
Exit
Case $ButtonA1
_CreatForm2()
Case $ButtonA2
GUIDelete($form2)

Case $ButtonB1
MsgBox(262144,'','B1')
Case $ButtonB2
MsgBox(262144,'','B2')

EndSwitch
Sleep(50)
WEnd

229989799 发表于 2020-2-12 22:49:10

没有代码全靠猜:face (39):

anythinging 发表于 2020-2-12 23:23:15

有时候论坛会巨慢无比

xzf680 发表于 2020-2-13 00:56:44


Global $form1, $ButtonA1, $ButtonA2, $form2, $ButtonB1, $ButtonB2

$form1 = GUICreate('1', 200, 200, 800, 400)
$ButtonA1 = GUICtrlCreateButton('显示窗口2', 20, 80, 100, 20)
$ButtonA2 = GUICtrlCreateButton('隐藏窗口2', 20, 110, 100, 20)
GUISetState(@SW_SHOW, $form1)
$form2 = GUICreate('2', 200, 200, 1200, 400)
$ButtonB1 = GUICtrlCreateButton('B1', 20, 80, 100, 20)
$ButtonB2 = GUICtrlCreateButton('B2', 20, 120, 100, 20)
GUISetState(@SW_HIDE, $form2)


While 1
        $aMsg = GUIGetMsg(1)
        Switch $aMsg
                Case $form1
                        Switch $aMsg
                                Case -3
                                        ExitLoop
                                Case $ButtonA1
                                        GUISetState(@SW_SHOW, $form2)
                                Case $ButtonA2
                                        GUISetState(@SW_HIDE, $form2)
                        EndSwitch
                Case $form2
                        Switch $aMsg
                                Case -3
                                        GUISetState(@SW_HIDE, $form2)
                                Case $ButtonB1
                                        MsgBox(262144, '', 'B1')
                                Case $ButtonB2
                                        MsgBox(262144, '', 'B2')
                        EndSwitch
        EndSwitch
WEnd


看看是不是这样,瞎扯一下,睡觉了。
:face (1):

lgdobo 发表于 2020-2-13 01:18:14

本帖最后由 lgdobo 于 2020-2-13 01:26 编辑

;我也是新手 ,不清楚你的意思,初步理解了一下是不是个这; 其中 $ButtonB1,$ButtonB2 后面可以不跟 $form2但是我原来遇到过不跟 $form2 这个有时候按钮就不显示了

#include <GUIConstantsEx.au3>

Global $form1, $ButtonA1, $ButtonA2, $form2, $ButtonB1, $ButtonB2

$form1 = GUICreate('1', 200, 200, -1, -1)
$ButtonA1 = GUICtrlCreateButton('显示窗口2', 20, 80, 100, 20)
$ButtonA2 = GUICtrlCreateButton('隐藏窗口2', 20, 110, 100, 20)
GUISetState(@SW_SHOW)
$form2 = GUICreate('2', 200, 200, 100, 100,$form1 )
$ButtonB1 = GUICtrlCreateButton('隐藏窗口1', 20, 50, 120, 20,$form2)
$ButtonB2 = GUICtrlCreateButton('显示窗口1', 20, 110, 120, 20,$form2)
While 1
      $msg = GUIGetMsg()
      Switch $msg
                Case -3
                        Exit
                Case $ButtonA1
                        
                        GUISetState(@SW_SHOW, $form2)
                Case $ButtonA2
                        
                        GUISetState(@SW_HIDE, $form2)
                case      $ButtonB1
                        GUISetState(@SW_HIDE, $form1)
                Case $ButtonB2
                        GUISetState(@SW_SHOW, $form1)
      EndSwitch
WEnd

anythinging 发表于 2020-2-13 03:35:24

感谢各位的回复,如果按照4楼的方法直接创建form2与buttonb1,buttonb2是一切正常的,我是想问如果是通过form1的按钮创建form2时,form2的按钮会有问题,目前知道是我用的方法完成的,想请各位指点下我的方法哪里有问题,如何修改,谢谢!

anythinging 发表于 2020-2-13 03:37:04

感谢各位的回复,如果按照4楼的方法直接创建form2与buttonb1,buttonb2是一切正常的,我是想问如果是通过form1的按钮创建form2时,form2的按钮会有问题,目前知道是我用的方法造成的问题,想请各位指点下我的方法哪里有问题,如何修改,谢谢!

chzj589 发表于 2020-2-13 08:56:42

anythinging 发表于 2020-2-13 03:37
感谢各位的回复,如果按照4楼的方法直接创建form2与buttonb1,buttonb2是一切正常的,我是想问如果是通过for ...
用事件模式

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $form1, $ButtonA1, $ButtonA2, $form2, $ButtonB1, $ButtonB2
_CreatForm1()
While 1
      Sleep(100)
WEnd
Func _CExit()
      GUIDelete()
      Exit
EndFunc   ;==>_CExit
Func _CreatForm1()
      $form1 = GUICreate('1', 200, 200, 800, 400)
      GUISetOnEvent($GUI_EVENT_CLOSE, "_CExit")
      $ButtonA1 = GUICtrlCreateButton('显示窗口2', 20, 80, 100, 20)
      GUICtrlSetOnEvent(-1, "_ButtonA1")
      $ButtonA2 = GUICtrlCreateButton('隐藏窗口2', 20, 110, 100, 20)
      GUICtrlSetOnEvent(-1, "_ButtonA2")
      GUISetState(@SW_SHOW, $form1)
EndFunc   ;==>_CreatForm1
Func _CreatForm2()
      $form2 = GUICreate('2', 200, 200, 1200, 400)
      $ButtonB1 = GUICtrlCreateButton('B1', 20, 80, 100, 20)
      GUICtrlSetOnEvent(-1, "_ButtonB1")
      $ButtonB2 = GUICtrlCreateButton('B2', 20, 110, 100, 20)
      GUICtrlSetOnEvent(-1, "_ButtonB2")
      GUISetState(@SW_SHOW, $form2)
EndFunc   ;==>_CreatForm2
Func _ButtonA1()
      _CreatForm2()
EndFunc   ;==>_ButtonA1
Func _ButtonA2()
      GUIDelete($form2)
EndFunc   ;==>_ButtonA2
Func _ButtonB1()
      MsgBox(262144, '', 'B1')
EndFunc   ;==>_ButtonB1
Func _ButtonB2()
      MsgBox(262144, '', 'B2')
EndFunc   ;==>_ButtonB2


anythinging 发表于 2020-2-13 11:29:07

chzj589 发表于 2020-2-13 08:56
用事件模式

#include


感谢指点!这个确实可以,而且居然可以不需要switch了。不知与之前那种方式的有什么区别,或者说通常适合用于什么案例中?

itsky2 发表于 2020-2-13 11:58:02

anythinging 发表于 2020-2-13 11:29
感谢指点!这个确实可以,而且居然可以不需要switch了。不知与之前那种方式的有什么区别,或者说通常适合 ...

这个更灵活一些的,而且也可以在主循环中加入其它函数
页: [1]
查看完整版本: 【已解决】关于新建创口中按钮出错的问题