浙江省杭州经济技术开发区白杨街道围垦街160号3幢3层301室 17447468382 julebu@baidu.ag

体育新闻

键盘焦点循环时怎样跳过隐藏和禁用控件:二十步控件状态与焦点循环·实例08

2026-11-03

用键盘在界面中逐项移动焦点,需要跳过暂时隐藏或无法操作的控件。当前控件消失后,焦点不能留在不可操作位置,也不应无故卡住整个遍历。

下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。

输入与规则

八个控件按编号排成一环,只有可见且启用的控件可获焦点。向前或向后操作从当前编号后继方向寻找,下一个可用项可绕回;没有焦点时,向前选最小可用编号,向后选最大。状态改变让当前失效时,按向前规则立即转移。没有焦点而重新出现可用项时,选择最小可用编号。

初始[可见标记,启用标记][[True, True, True, True, False, False, True, True], [True, True, True, True, True, False, True, True]],初始焦点0 二十步操作[['next'], ['visible', 4], ['prev'], ['enabled', 0], ['visible', 4], ['enabled', 3], ['next'], ['enabled', 1], ['enabled', 1], ['next'], ['next'], ['next'], ['hide_all'], ['next'], ['show', 3], ['enable', 3], ['prev'], ['show', 6], ['enable', 6], ['next']]

逐步记录

第1步['next'],当前可用编号[0, 1, 2, 3, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第2步['visible', 4],当前可用编号[0, 1, 2, 3, 4, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第3步['prev'],当前可用编号[0, 1, 2, 3, 4, 6, 7],焦点0。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第4步['enabled', 0],当前可用编号[1, 2, 3, 4, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第5步['visible', 4],当前可用编号[1, 2, 3, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第6步['enabled', 3],当前可用编号[1, 2, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第7步['next'],当前可用编号[1, 2, 6, 7],焦点2。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第8步['enabled', 1],当前可用编号[2, 6, 7],焦点2。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第9步['enabled', 1],当前可用编号[1, 2, 6, 7],焦点2。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第10步['next'],当前可用编号[1, 2, 6, 7],焦点6。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第11步['next'],当前可用编号[1, 2, 6, 7],焦点7。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第12步['next'],当前可用编号[1, 2, 6, 7],焦点1。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第13步['hide_all'],当前可用编号[],焦点None。没有可用控件时保留空焦点。

第14步['next'],当前可用编号[],焦点None。没有可用控件时保留空焦点。

第15步['show', 3],当前可用编号[],焦点None。没有可用控件时保留空焦点。

第16步['enable', 3],当前可用编号[3],焦点3。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第17步['prev'],当前可用编号[3],焦点3。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第18步['show', 6],当前可用编号[3, 6],焦点3。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第19步['enable', 6],当前可用编号[3, 6],焦点3。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

第20步['next'],当前可用编号[3, 6],焦点6。焦点必须落在可见且启用的控件上,按方向循环跳过其他控件。

所有控件隐藏时能够进入空焦点,重新出现可用控件时再选择有效项,不把空状态当作零号控件。

复核方法和适用范围

独立列出当前所有可用编号,用循环距离找到下一个;如果没有可用项,焦点必须为空。每次状态修改后核对焦点属于可用集合,向前和向后寻址遵守各自方向,而不是固定挑第一个。

这是一套简化界面导航规则,不代替真实应用的完整无障碍规范。弹窗、文本输入内部光标和焦点层级都没有模拟。隐藏与禁用只是影响可用资格的不同标记,不会删除控件本身。

练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。