为什么GUI在循环中重新生成?

时间:2014-06-02 15:56:22

标签: user-interface autohotkey

在我的小(和第一个)AutoHotkey GUI上,我无法理解为什么在Destroy后重新生成窗口:

Call:
{
; the "phonebook"
book := {"Tel Maison": "8912", "Tel Mobile": "000000"}
nr := book[A_GuiControl]
; getting rid of the chooser window
Gui, 1:Destroy
; raises the IP phone
; dials the number  
; right now just a debug message 
MsgBox number: %nr%
}   

CapsLock::
Gui, 1:font, cBlue s20 bold, Verdana
Gui, 1:Add, Button, gCall, Tel Maison
Gui, 1:Add, Button, gCall, Tel Mobile
GUI, 1:-Border -SysMenu -Caption
Gui, 1:Show

我的理解是窗口是在CapsLock之后和Show之后创建的。调用CallGui, 1:Destroy应关闭选择器(带有两个按钮的窗口)。直到下一个CapsLock事件。

实际发生的事情:

  • 调用Call例程,
  • 选择器(GUI窗口)消失
  • MsgBox出现
  • 点击OK之后
  • 重新出现选择器

1 个答案:

答案 0 :(得分:1)

为什么不删除大括号并使用正常的sub语法?我认为您混合了functionsub语法。

Call:
    ;do stuff
Return

或使用函数语法:

Call(){
    ;global    ;uncomment this if you need all the vars global
    ;do stuff
}

您还应在return转让后添加capslock

CapsLock::
    Gui, 1:font, cBlue s20 bold, Verdana
    Gui, 1:Add, Button, gCall, Tel Maison
    Gui, 1:Add, Button, gCall, Tel Mobile
    GUI, 1:-Border -SysMenu -Caption
    Gui, 1:Show
RETURN

我认为这是你的问题。如果您未关闭call子块(括号不会关闭sub),则会自动加载GUI。

另外,我认为另一个问题是,每次推出大写时,它都会创建另一个GUI。您可能希望先删除旧的并重建它或使其可重复使用,然后隐藏并显示它。

重建它很容易:

Gui, 1:new   ;this will cause your window to be rebuilt.
gui, 1:font, cBlue s20 bold, Verdana