如何在主窗口中弹出一个列表对话框?
本帖最后由 ejzhang 于 2009-6-20 18:29 编辑需求:在主窗口单击“开始”后,出现一个列表框要求用户选择其中一项(此时除了从列表框中选择不能进行其他操作),用户选择后即进行下一步操作。
思路1:在主窗口中弹出一个列表框,选择其中一项后再回到主窗口
我们没到怎么弹出列表框。
或者思路2:弹出一个模式窗口(就是在关闭之前不能对父窗口进行操作),在模式窗口中显示一个列表框。
但是我发现弹出的窗口不管用什么参数,都可以对其父窗口进行操作,这样很容易出问题,比如又点了父窗口的按钮就会再弹出一个同样的窗口。
这两个问题能解决一个就可以,请各位大虾帮忙,谢谢! 在单击“开始”后,使用GUISetState(@SW_DISABLE ,主窗口句柄)
等到选择完后再使用 GUISetState(@SW_ENABLE,主窗口句柄)
如果不行试试使用
@SW_HIDE = 隐藏窗口
@SW_SHOW = 使已隐藏窗口显示出来(默认) #include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
While 1
$Form1 = GUICreate(" 主窗口中弹出列表对话框", 400, 200, 200, 200)
$Button1 = GUICtrlCreateButton("开始", 150, 144, 121, 33, 0)
$Form2 = GUICreate("列表对话框",200, 200, 200, 200)
$Button2 = GUICtrlCreateButton("确定", 24, 40, 121, 33, 0)
GUICtrlCreateCombo("请选择", 24, 10, 121, 33)
GUISetState(@SW_SHOW, $Form1)
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg
Case $GUI_EVENT_CLOSE
If $nMsg == $Form1 Then
Exit
ElseIf $nMsg == $Form2 Then
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_HIDE, $Form2)
EndIf
Case $Button1
GUISetState(@SW_SHOW, $Form2)
GUISetState(@SW_HIDE, $Form1)
Case $Button2
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_HIDE, $Form2)
EndSwitch
WEnd
WEnd 楼上的思路是把主窗口隐藏,我想在不隐藏主窗口的情况下弹出一个子窗口,并且在不关闭子窗口时无法访问主窗口,不知能否实现?谢谢! 留个名,学习下 本帖最后由 lynfr8 于 2009-6-9 22:23 编辑
不隐藏主窗口的情况下弹出一个子窗口,并且在不关闭子窗口时无法访问主窗口
代码修改于作者sanhen
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
#include <winapi.au3>
Opt("GUIOnEventMode", 1)
$Main_GUI = GUICreate("Main", 500, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "_GuiMsg")
GUISetBkColor(0x008040, $Main_GUI)
$Btn_Show = GUICtrlCreateButton("Show All", 10, 10, 90, 20)
GUISetState(@SW_SHOW, $Main_GUI)
$Child1_GUI = GUICreate("Child1", 200, 100, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "_GuiMsg")
$Btn_Test1 = GUICtrlCreateButton("Test", 10, 10, 90, 20)
GUICtrlSetOnEvent($Btn_Show, "_GuiMsg")
GUICtrlSetOnEvent($Btn_Test1, "_GuiMsg")
While 1
Sleep(250)
WEnd
Func _GuiMsg()
Switch @GUI_CTRLID
Case $GUI_EVENT_CLOSE
Switch @GUI_WinHandle
Case $Main_GUI
Exit
Case $Child1_GUI
GUISetState(@SW_HIDE,$Child1_GUI )
GUISetState(@SW_ENABLE ,$Main_GUI )
EndSwitch
Case $Btn_Show
GUISetState(@SW_SHOW,$Child1_GUI )
GUISetState(@SW_DISABLE ,$Main_GUI )
Case $Btn_Test1
MsgBox(64,"测试","我是子窗口")
EndSwitch
EndFunc
学习下楼上的代码 解决了,弹出子窗体时先把父窗体禁用(GUISetState(@SW_DISABLE, $frmParentWin)),关闭子窗体时再把父窗体启用(GUISetState(@SW_ENABLE, $frmParentWin))就可以了。
多谢楼上几位的解答! 很好,十分强大.. 嗯!很不错,学习了。 :face (29):学习了 嗯!很不错,学习了
页:
[1]