我一直致力于将 AutoHotkey 脚本从 v1 转换为 v2,并且在封装选择列表 GUI 方面遇到了挑战。我花了几个小时在网上寻找解决方案,但一直找不到。 AHK v2 帮助文件虽然很全面,但对初学者来说不太友好,我正在努力寻找正确的语法。
我面临的具体问题涉及将 GUI 创建代码封装在函数中,并且我想避免使用全局变量。我想调用此函数,从列表中选择一个项目,然后将该项目返回给调用者。
我相信我不是唯一一个努力从 AHK v1 过渡到 AHK v2 的人。我也很惊讶 AutoHotkey v2 没有标签。
#Requires AutoHotkey v2.0
#SingleInstance Force
; Driver Code
ItemList := ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"]
Loop
{
item := "You selected " OpenListSelectionGui(ItemList, "Select an Item")
info := "Do you want to continue the tests?"
test := MsgBox(item "`n`n" info, "AutoHotkey v2 GUI Testing", "OKCancel")
if (test == "Cancel")
ExitApp
}
; GUI Encapsulation
OpenListSelectionGui(pList, pGuiTitle)
{
SelectedValue := ""
ListGui := Gui("ToolWindow", pGuiTitle)
ListGui.OnEvent("Close", Gui_Close)
ListCtrl := ListGui.AddListBox("Choose1 r5", pList)
ListGui.AddButton("Default", "Select").OnEvent("Click", Gui_Close)
ListGui.Show()
While (!SelectedValue)
{
Sleep 222
}
Return SelectedValue
Gui_Close(*)
{
SelectedValue := ListCtrl.Text
ListGui.Destroy
}
}