AutoHotkey如何无需逐个指定变量检测所有复选框均未选中
AutoHotkey复选框全未选中状态通用检测方案
核心优化逻辑是用批量遍历代替逐个变量判断,后续新增复选框无需修改判断语句,可大幅降低维护成本。
推荐实现(无需维护变量列表)
给所有搜索相关复选框增加统一的自定义类名,运行时直接遍历该类下所有控件即可完成状态校验,新增复选框时只需要加控件定义,不需要修改任何校验逻辑,代码改动最小。
完整修改后代码
#!s:: Gui, Destroy gui, font, S12 ; 更改字体大小为12 Gui, Add, GroupBox, x0 w460 h180, Pesquisa: ; 增加分组框 ; 所有复选框统一加上 Class SearchCheckBox 标记 gui, Add, Checkbox, x20 y30 checked0 vstackBR Class SearchCheckBox, Pt.StackOverflow.com gui, Add, Checkbox, checked1 vstack Class SearchCheckBox, StackOverflow.com gui, Add, Checkbox, checked1 vstackAHK Class SearchCheckBox, StackOverflow.com/AutoHotkey gui, Add, Checkbox, checked0 vahk Class SearchCheckBox, AutoHotkey.com gui, Add, Checkbox, checked0 vReddit Class SearchCheckBox,Reddit.com Gui, Add, Checkbox, Checked0 Vtech Class SearchCheckBox,Techonthenet.Com gui, Add, Text, x10 y+20, Pesquisar por: gui, Add, Edit ,x+10 yp-5 w360 vSearchTerm gui, Add, Button, w82 gSearch Default, &Pesquisar gui, Show GuiControl,Focus,SearchTerm return Search: Gui Submit ; 读取控件值 ; 批量检测所有复选框是否全未选中 allUnchecked := true WinGet, controlList, ControlList, A Loop, Parse, controlList, `n { if InStr(A_LoopField, "SearchCheckBox") { GuiControlGet, checkState, , %A_LoopField% if (checkState = 1) { allUnchecked := false break ; 命中一个选中项就终止遍历,提升运行效率 } } } if (allUnchecked) run "http://www.google.com/search?q=%SearchTerm%" ; 可选优化:站点跳转也做通用配置,新增站点只需要加下面数组的配置项,不用加新的if判断 siteConfig := [ {var: "stack", suffix: "+site:stackoverflow.com"}, {var: "stackBR", suffix: "+site:pt.stackoverflow.com"}, {var: "stackAHK", suffix: "+site:stackoverflow.com/AutoHotkey"}, {var: "ahk", suffix: "+site:autohotkey.com"}, {var: "Reddit", suffix: "+site:reddit.com"}, {var: "tech", suffix: "+site:techonthenet.com"} ] for _, item in siteConfig { if (%item.var%) { run "http://www.google.com/search?q=%SearchTerm%" item.suffix } } return
轻量替代方案(维护变量数组)
如果不想修改控件定义,可以把所有复选框的关联变量名提前存入数组,遍历数组做校验,比逐个写判断条件更易维护:
; 新增复选框只需要在这个数组里加变量名 checkBoxList := ["stackBR", "stack", "stackAHK", "ahk", "Reddit", "tech"] allUnchecked := true for _, varName in checkBoxList { if (%varName%) { allUnchecked := false break } }
内容的提问来源于stack exchange,提问作者Felipe Lullio
相关产品推荐
相关产品推荐

