AutoHotKey - 使用文本框中的数据设置正确的单选按钮

AutoHotKey - Using Presence of Data In a Text Box to Set Correct Radio Button

我的一个数据输入脚本有多个 GUI,提示用户回答一系列问题,并根据这些答案在记事本中生成一个模板,将其复制并粘贴到程序的备注部分以发送对承包商的委任令。

我创建的一些 GUI 只有“是”和“否”单选按钮,但其他的有“是”和“否”单选按钮以及用于输入其他数据的文本框。例如,一个 GUI 询问我们诊所是否有即将到来的预约。默认单选按钮为“否”,因此用户可以快速跳到系列中的下一个 GUI,因为 GUI 底部的“下一步”按钮已设置为默认按钮。

示例:

If ApptsRadioButtonYes = 1
{
 SendInput >{space 2}>{space 2}>{space}Future Appointments - Do NOT Schedule On This Date{(}s{)}{space}<{space 2}<{space 2}<  ; Top-of-section banner line
 Send {Enter 2}
 Send %Appts_Info% ; list of appointments entered in text box
 Send {Enter 2}
 SendInput >{space 2}>{space 2}>{space 2}>{space}<{space 2}<{space 2}<{space 2}<  ;  End-of-section banner line
 Send {Enter 3} 
}
Else If ApptsRadioButtonNo = 1
{
Send Appointments pending:  None
Send {Enter 3}
}

缺陷是,默认设置为否,如果用户在文本框中输入信息但忘记将单选按钮更改为是,脚本将忽略任何 next-of-kin 信息或约会信息并打印在脚本末尾输出一行文本作为“"Upcoming Appointments: None" or "NOK: None."

相反,如果我将默认值设置为是,但用户未在文本框中输入任何内容,则脚本将打印 "NOK: ",后面没有任何内容。即将到来的约会 GUI 也会发生同样的事情,但更令人困惑:脚本打印 "Upcoming Appointments" 横幅行、一个空行、另一个空行(应该有约会的地方),以及另外两个{输入}。

如果文本框中有数据,是否有我可以使用的命令将单选按钮更改为是,类似于(伪代码):

If UserData is not blank
{
 Set RadioButtonYes to 1
 Set RadioButtonNo to 0
}

这样,如果有数据但用户忘记将适当的单选按钮设置为是,则文本框中存在的数据会负责正确设置,并写入适当的标题和数据。

或者,我可以将类似的 GUI 更改为 Yes/No,如果答案是肯定的,则会弹出另一个 GUI 来获取数据;如果答案是否定的,它将继续到下一个 Yes/No GUI。我宁愿将 GUI 的数量减少到可管理的大小,并且每个 GUI 仅限于一个主题。我什至可以将所有内容组合到一个 GUI 中,但这可能会有点 "busy."

谢谢!

只要用户在编辑字段中键入内容,您就可以自动启动子例程:

A g-label such as gMySubroutine may be listed in the control's options. This would cause the MySubroutine label to be launched automatically whenever the user or the script changes the contents of the control.

(documentation)

在我下面的代码示例中,这由 gcharTyped 关键字表示,意思是 "Jump to label called chartyped"。

gui, 1:add, radio, vApptsRadioButtonYes group, Yes
gui, 1:add, radio, checked vApptsRadioButtonNo, No
gui, 1:add, edit, vUserData gcharTyped w150 h150
gui, 1:add, button, gsubmit, submit
gui, 1:show

return

submit:
gui, 1:submit
if ApptsRadioButtonYes = 1
    msgbox, Yes!
else if ApptsRadioButtonNo = 1
    msgbox, No!
exitapp
return

charTyped:
; change the state of the first radio button to CHECKED:
; also unchecks all remaining radio buttons from the same group
GuiControl, 1:, ApptsRadioButtonYes, 1
return

1guiClose:
exitapp
return