AHK 变量文件夹路径取决于单选按钮的选择

AHK variable folder path dependent on radio button choice

提问人:Neelfinity 提问时间:11/3/2023 更新时间:11/4/2023 访问量:46

问:

日安

我正在尝试为 AutoHotKey (AHK) 创建脚本。脚本本身已经运行良好:一个小的 GUI,每种颜色(黑色或白色)都有两个单选按钮,但我希望有一个单一的功能,而不是像现在这样为每种颜色使用 gosub,因为我希望将来添加更多颜色。

下面是 GUI:

enter image description here

脚本如下:

Gui, Main:new

Gui, Add, GroupBox, x10 y6 w150 h100 R3, Color:
Gui, Add, Radio, Checked        vColor1 xp+10 yp+20,    Black
Gui, Add, Radio,                vColor2,                White

Gui, Add, Button, gEnter xp-11 yp+42, Enter

Gui, Show
return

Enter:
    Gui, Submit, NoHide
    Switch {
        Case Color1:
            gosub ColorBlack
        Case Color2:
            gosub ColorWhite
    }
    Gui, Hide
return

GuiClose:
ExitApp

ColorBlack:
    Gui, ColorBlack: Add, Picture,, %A_ScriptDir%\color-black.png
    Gui, ColorBlack: Show
return

ColorWhite:
    Gui, ColorWhite: Add, Picture,, %A_ScriptDir%\color-white.png
    Gui, ColorWhite: Show
return

这也是为什么我需要保持现在的这种结构。因此,为了只有一个函数(只有 Color 而不是 ColorBlackColorWhite),我需要引用单选按钮选择的路径的特定部分(以便它将颜色名称放在正确的位置):

Color:
    Gui, ColorBlack: Add, Picture, x0 y0 w1920 h1920, %A_ScriptDir%\color-%color%.png
    Gui, ColorBlack: Show
return

上面的一个当然是行不通的——有人知道如何解决这个问题吗?

路径 单选按钮 自动热键

评论


答:

1赞 Dieisson Silva dos Santos 11/4/2023 #1
Gui, Main:new
Gui, Add, GroupBox, x10 y6 w150 h100 R3, Color:
Gui, Add, Radio, Checked        vColor xp+10 yp+20  ,   Black   ; 1 -   you may use just one var for a radio button group, it'll be indexed
Gui, Add, Radio,                                    ,   White   ; 2
Gui, Add, Radio,                                    ,   Yellow  ; 3 and so on

Gui, Add, Button, gEnter xp-11 yp+42, Enter

Gui, Show

return

; Enter:
    ; Gui, Submit, NoHide
    ; Switch {

        ; Case Color1:  ;   just so you know, you dont need to use gosub with switch/case, you may just nest it under each case, but this would'nt be the best choice in this situtation
            ; Gui, ColorBlack: Add, Picture,, %A_ScriptDir%\color-black.png
            ; Gui, ColorBlack: Show

        ; Case Color2:
            ; Gui, ColorWhite: Add, Picture,, %A_ScriptDir%\color-white.png
            ; Gui, ColorWhite: Show

    ; }
    ; Gui, Hide
; return

GuiClose:
    ExitApp


Enter:

    Gui, Submit

    selected_color :=   color = 1 ; ternary operator to determine which color is selected | if ? then : else
                            ?   "black"
                    :   color = 2
                            ?   "white"
                    :           "yellow"
    Gui, Color:Add, Picture,,% A_ScriptDir "\color-" selected_color ".png"
    Gui, Color:Show


return

ColorGuiClose:  ;   destroy the color gui and show the main gui

    Gui, Color:Destroy
    Gui, Main:Show

Return