You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GMS 1.x/3.x中DM脚本UI的Tab键顺序差异及控制方法咨询

解决GMS不同版本UI Tab焦点切换顺序不一致的问题

可以通过显式设置控件的Tab切换顺序,强制覆盖不同版本的默认行为,让UI在GMS 1.x和3.x中保持一致的Tab焦点切换逻辑。

修改后的代码示例

Class UI:uiframe {
    TagGroup MainFrame(object self) {
        TagGroup Dialog=DLGCreateDialog("")
        
        tagGroup lbl1=DLGCreateLabel("label 1:") 
        tagGroup fld1=DLGCreateStringField("string 1",20).DLGIdentifier("field1")
        tagGroup grp1=DLGGroupItems(lbl1,fld1).DLGTableLayout(2,1,0)
        
        tagGroup lbl2=DLGCreateLabel("label 2:") 
        tagGroup fld2=DLGCreateStringField("string 2",20).DLGIdentifier("field2")
        tagGroup grp2=DLGGroupItems(lbl2,fld2).DLGTableLayout(2,1,0)
        
        tagGroup lbl3=DLGCreateLabel("label 3:") 
        tagGroup fld3=DLGCreateStringField("string 3",20).DLGIdentifier("field3")
        tagGroup grp3=DLGGroupItems(lbl3,fld3).DLGTableLayout(2,1,0)
        
        // 显式设置Tab切换顺序,和GMS 1.x默认逻辑一致
        fld1.DLGSetTabOrder(fld2)
        fld2.DLGSetTabOrder(fld3)
        fld3.DLGSetTabOrder(fld1) // 可选:切换到最后一个后循环回到第一个
        
        Dialog.DLGAddElement(grp1)
        Dialog.DLGAddElement(grp2)
        Dialog.DLGAddElement(grp3)
        return Dialog
    }

    UI(object self) { //constructor, start from here
        self.init(self.MainFrame())
        self.display(" ").WindowSetFramePosition(800, 30 )
    }
    ~UI(object self) {
        result("\nUI destructed")
    }
}
void main() {
    object My_UI = Alloc(UI)
    Return
}
{
    main()
}

原理说明

使用DLGSetTabOrder方法可以指定当前控件按Tab键后焦点切换的目标控件。通过为每个输入框依次设置下一个焦点目标,就能完全控制Tab切换的顺序,不受GMS版本默认逻辑的影响,确保在1.x和3.x中都保持fld1 → fld2 → fld3 → fld1的切换顺序。

如果不需要循环切换,也可以将最后一个控件的Tab目标设为NULL,这样切换到fld3后按Tab就不会再切换焦点。

内容的提问来源于stack exchange,提问作者user6406828

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:50:33