AHK GUI 卡查看流程问题

AHK GUI card view flow issue

Gui, 1:Add, Tab, x-11 y-21 w493 h405 vCardTabs, Tab1|Tab2|Tab3

Gui, Tab, Tab1 
    Gui, 1:Add, Text,, This is tab 1
    Gui, 1:Add, Button, x352 y330 w100 h30 , Next

Gui, Tab, Tab2
    Gui, 1:Add, Text,, This is tab 2
    Gui, 1:Add, Button, x352 y330 w100 h30 , Next
    Gui, 1:Add, Button, x242 y330 w90 h30 , Back

Gui, Tab, Tab3  
    Gui, 1:Add, Text,, This is tab 3
    Gui, 1:Add, Button, x242 y330 w90 h30 , Back

Gui, 1:Show, x-1246 y259 h379 w479, Card view gui
Return

1GuiClose:
ExitApp

ButtonBack:
Send ^+{TAB}
return

ButtonNext:
Send ^{TAB}
return

我已经在 AHK 中创建了一个卡片视图布局,但是我遇到了一个问题,我使用了一种方法来创建一组选项卡,并在可查看程序之外的用户视图中隐藏这些选项卡 window ,但是用户可以向 window 发送命令以循环浏览选项卡,例如 Control + tab

我想知道是否有更好的方法来形成这种类型的 GUI 并具有更多控制,例如仅通过按下按钮传递到下一个选项卡(面板?)

如果我错过了某种类型的面板视图,可以添加它来避免这个问题,这将对我有很大帮助,谢谢

我假设您想禁用 ctrl+tab 和 ctrl+shift+tab 用于您的脚本,但按钮仍然在选项卡中循环。

下面你会发现我覆盖了 ctrl+... 热键并且如果你的 gui 处于活动状态则不允许发送该功能,否则它会发送所需的击键(很重要,因为我们希望它能在其他选项卡式应用程序中工作)。

为了在选项卡中循环 w/o ctrl+... 热键,我获取当前 selected 选项卡的名称,并使用 GuiControl , 选择...到 select next/previous 选项卡。

最后,在您的脚本停止时,我演示了您可以命名您的 GUI 并将它们设置为默认值。

; you can name your guis vs using numbers
Gui, MyCustomName_:Default ; setting as default will tell all controls below it to use that gui
Gui, Add, Tab, w493 h405 vCardTabs, Tab1|Tab2|Tab3

Gui, Tab, Tab1 
    Gui, Add, Text,, This is tab 1
    Gui, Add, Button, x352 y330 w100 h30 , Next

Gui, Tab, Tab2
    Gui, Add, Text,, This is tab 2
    Gui, Add, Button, x352 y330 w100 h30 , Next
    Gui, Add, Button, x242 y330 w90 h30 , Back

Gui, Tab, Tab3  
    Gui, Add, Text,, This is tab 3
    Gui, Add, Button, x242 y330 w90 h30 , Back

Gui, Show, y259 h379 w479, Card view gui
return

MyCustomName_GuiClose:
ExitApp

$^tab::
{
    IfWinNotActive, Card view gui
        SendInput, ^{tab}
    return
}
$^+tab::
{
    IfWinNotActive, Card view gui
        SendInput, ^+{tab}
    return
}

ButtonBack:
GuiControlGet, name,, CardTabs
if (name == "Tab2") {
    GuiControl, Choose, CardTabs, Tab1
} else if (name == "Tab3") {
    GuiControl, Choose, CardTabs, Tab2
}
return

ButtonNext:
GuiControlGet, name,, CardTabs
if (name == "Tab1") {
    GuiControl, Choose, CardTabs, Tab2
} else if (name == "Tab2") {
    GuiControl, Choose, CardTabs, Tab3
}
return

希望对您有所帮助!