当我添加 GUI 时,AHK 在 } 之前突然需要 return

AHK suddenly requires return before } when i add GUI

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

工作代码:

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%
}

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

为此,我们可以给 GUI 一个标签,这是使用 Gui, MyLabel:New. This allows AHK to work with different GUIs at the same time, but it also makes it easier to deal with the default window event handlers 完成的,方法是将 GuiClose 更改为 MyLabelGuiClose

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

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