0

下面是我的程序。在这里,我的意图是在用户按下Button后显示三个CheckBox。单击- Button后它们确实会出现,但我无法单击CheckBoxes。可能是什么原因?ok

#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
4

2 回答 2

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 元素正常工作。

于 2013-07-02T12:33:20.270 回答
1

问题是标签比它需要的大很多(600px 高),并且覆盖了复选框。要解决此问题,只需将高度更改为更合理的值(我通常使用 18px 作为单行标签)。

作为一个额外的说明,你不应该在消息循环中睡觉。消息只会排队,GUI 不会响应。相反,您应该有一个可以在后台运行的计时器。

于 2013-07-02T12:20:22.690 回答