以下是我的计划。我的目的是在用户按下按钮后显示三个 CheckBoxes 。它们会在点击ok
- 按钮后出现,但我无法点击 CheckBoxes 。可能是什么原因?
#include <GUIConstants.au3>
$gui = GuiCreate("Hello World", 700, 600)
$Label_HelloWorld = GuiCtrlCreateLabel("Path", 40, 20, 300, 600)
$Button_OK = GuiCtrlCreateButton("OK", 450, 20, 50, 20)
GuiSetState(@SW_SHOW, $gui)
While True
$guimsg = GuiGetMsg()
Select
Case $guimsg == $GUI_EVENT_CLOSE
GuiDelete($gui)
ExitLoop
Case $guimsg == $Button_OK
$Label_sub_folder1 = GuiCtrlCreateLabel("Select the subfolder", 40, 65, 300, 600)
$CheckBox1 = GUICtrlCreateCheckbox('functionality', 40, 85, 80, 23)
$CheckBox2 = GUICtrlCreateCheckbox('performance', 160, 85, 80, 23)
$CheckBox3 = GUICtrlCreateCheckbox('listening', 280, 85, 80, 23)
Sleep(50000)
ExitLoop
EndSelect
WEnd
答案 0 :(得分:1)
问题是标签比它需要的要大得多(600px高),并且掩盖了复选框。要修复只是将高度更改为更合理的值(我通常使用18px作为单行标签)。
作为额外注释,您不应该在消息循环中睡觉。消息将排队,GUI将无法响应。相反,你应该有一个可以在后台运行的计时器。
答案 1 :(得分:1)
你的代码风格很乱......让我们来看看这段代码:
#include <GUIConstants.au3>
$gui = GUICreate("Test")
$button = GUICtrlCreateButton("ok", 200, 10, 40, 23)
$checkbox = GUICtrlCreateCheckbox("checkbox1", 10, 10, 80, 23)
GUICtrlSetState($checkbox, $GUI_HIDE)
GUISetState(@SW_SHOW)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $button
GUICtrlSetState($checkbox, $GUI_SHOW)
EndSwitch
WEnd
区别在哪里?它的标签尺寸不会太大。并且它在显示GUI之前定义了每个所需的控件元素。只是您希望稍后显示的元素首先被隐藏然后显示...
因此,您的主要问题是两个语句中的标签高度,这将创建一个标签,涵盖所有以下GUI元素,使其无法使用。您可以 - 如果需要 - 使用GUICtrlSetState($background, $GUI_DISABLE)
与某种$background
- 组件(如标签或图形),以防止它停留在顶部并阻碍其他GUI元素正常工作。