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
相关产品推荐
相关产品推荐

