无法单击AutoIt中的CheckBox

时间:2013-07-01 11:51:33

标签: autoit

以下是我的计划。我的目的是在用户按下按钮后显示三个 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

2 个答案:

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