首页 > 解决方案 > 当我添加 GUI 时,AHK 突然需要在 } 之前返回

问题描述

在制作一个小项目时,我添加了一个 GUI,它突然需要返回?我想让它询问应该命名一个文件夹然后创建它它正在工作,但是我为你想要下载的内容添加了 GUI,它需要返回我在其他任何地方都找不到关于这个主题的任何其他内容

工作代码:

if !FileExist(%UserInput%) { 
MsgBox, 0, Serkket Servers, Server will build files, press ok to continue `n Server will open when done
FileCreateDir, %UserInput%
}

不工作代码:

if !FileExist(%UserInput%) {
Gui, New,, Server Software
Gui, Color, 707070
Gui, Add, DropDownList, vServVers, 1.16.5|1.16.4|1.16.3|1.16.2|1.16.1|1.15.2|1.15.1|1.15|1.14.4|1.14.3|1.14.2|1.14.1|1.14|1.13.2|1.13.1|1.13|1.12.2|1.12.1|1.12|1.11.2|1.11.1|1.11|1.10.2|1.9.4|1.9.2|1.9|1.8.8|1.8.3|1.8
Gui, Add, Button, Default w80, OK
Gui, +Resize +MinSize480x240
Gui, Show
Pause, On
ButtonOK:
Gui, Submit
MsgBox, 0, Serkket Servers, Server will build files, press ok to continue `n Server will open when done
FileCreateDir, %UserInput%
}

错误:

标签: autohotkey

解决方案


在这种情况下返回是必需的,因为您有一个ButtonOK:标签尚未正确关闭以形成它的子例程。由于这return是需要的,您需要将标签移动到代码中的其他位置,即当前部分之外的某个位置。如果此代码发生在文件的顶部,则需要将其移到自动运行段之外。

为了帮助解决这个问题,我们可以给 GUI 一个标签,使用Gui, MyLabel:New. 这使得 AHK 可以同时使用不同的 GUI,但也可以通过更改GuiCloseMyLabelGuiClose.

这会将您的条件语句更新为:

if !FileExist(%UserInput%) {
  Gui, SelectServers:New, +Resize +MinSize480x240 +HwndSelectServersHwnd, Server Software
  Gui, SelectServers:Color, 707070
  Gui, SelectServers:Add, DropDownList, vServVers, 1.16.5|1.16.4|1.16.3|1.16.2|1.16.1|1.15.2|1.15.1|1.15|1.14.4|1.14.3|1.14.2|1.14.1|1.14|1.13.2|1.13.1|1.13|1.12.2|1.12.1|1.12|1.11.2|1.11.1|1.11|1.10.2|1.9.4|1.9.2|1.9|1.8.8|1.8.3|1.8
  Gui, SelectServers:Add, Button, Default w80 gSelectServersButtonOK, OK   ; <- don't forget to connect the handler
  Gui, SelectServers:Show
  WinWaitClose, ahk_id %SelectServersHwnd% ; <- This is a better choice than "Pause, On"
}

这可以添加到自动运行部分之外的任何地方(如文件底部)

return ; <- makes sure the auto run section has ended (only needed once)

SelectServersButtonOK:
Gui, SelectServers:Submit
MsgBox, 0, Serkket Servers, Server will build files, press ok to continue `n Server will open when done
FileCreateDir, %UserInput%
Gui, SelectServers:Destroy
return

SelectServersGuiClose:
SelectServersGuiEscape:
; TODO: Handle cancelling selection GUI
; e.g. ExitApp, cancel folder creation, etc.
Gui, SelectServers:Destroy
return

推荐阅读