2013-07-01 127 views
0

下面是我的程序。在这里我的目的是要显示三个的CheckBox用户按下按钮。他们点击后ok出现 - 按钮,但我无法点击的CheckBox。可能是什么原因?无法点击AutoIt中的CheckBox

#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

这是典型的AutoIT,你用'while 1'永不结束这样的循环吗? – Kamil

+0

@Kamil,对不起,我已经编辑的代码 –

回答

1

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

作为一个额外的笔记,你不应该的消息循环内睡觉。消息只会排队等待,GUI将不会响应。相反,你应该有一个可以在后台运行的计时器。

+0

非常感谢你 –

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 -component一个标签或图形,以防止它停留在顶部,阻碍其他GUI元素能够正常工作的。

+0

非常感谢你 –