# 功能变更 ID: Feature-20260109-0001 > 适用场景:记录小到中等规模的功能、接口、行为、默认值或配置变化。 > 不适用场景:新增核心模块、重大模块重构、架构级设计,请使用“新增功能模块”模板。 ## 基本信息 - ID: Feature-20260109-0001 - 标题: TabControl 页签切换时序调整 - 状态:已完成(历史记录;本次仅归档,未重新验证) - 类型:修改 - 级别:L2 中等 - 模块: TabControl - 版本 / 分支: v3.0.0 / master - 环境: Windows 11 / Visual Studio 2022 / Debug、Release / EasyX - 负责人: Ysm-04(历史实现) ## 变更背景 - 背景: 原页签切换回调先显示目标页,再关闭其他页,在复杂容器和背景快照链路中可能短暂形成多页同时可见的状态。 - 目标: 将切换顺序收敛为先停用原页,再激活目标页,降低重绘和快照时序的不确定性。 - 不做什么:[可选] - 不改变 TabControl 的公共调用接口。 - 不改变页签按钮与页面 Canvas 的配对模型。 ## 变更内容 - 变更摘要: 调整 `TabControl::add()` 注册的 Toggle 回调执行顺序。 - 新增项:[可选] - 激活日志记录原页索引、目标页索引和页签文本。 - 修改项:[可选] - 激活目标页前,先找到当前可见页面并停用其他已点击页签。 - 其他页签的 ToggleOff 回调负责隐藏对应页面。 - 旧页停用后,再更新目标页布局、显示目标页并标记 TabControl 为脏。 - 删除 / 废弃项:[可选] - 无。 - 受影响的文件 / 类 / 函数: - 历史路径:`src/TabControl.cpp` - `TabControl::add()` 内的 ToggleOn / ToggleOff 回调 - 对外 API / 属性变化:[可选] - 无,属于内部切换时序调整。 ## 行为对照 - 变更前: 先显示目标页面,再遍历关闭其他页签和页面。 - 变更后: 先通过其他页签的关闭回调隐藏旧页面,再显示并激活目标页面。 - 兼容性说明:兼容 - 迁移说明:[可选] - 调用方无需改动;若业务代码依赖切换过程中两个页面短暂同时可见的副作用,应移除该依赖。 ## 验证与落地 - 验证方式: - 分别创建包含 3 个和 5 个页签的 TabControl,连续点击不同页签。 - 检查日志顺序,确认旧页先关闭、目标页后激活。 - 重复触发同一页签,观察激活和关闭行为。 - 验证结果: - PDF 历史记录将 3 页签、5 页签和同页签重复触发场景记为正常。 - 本次归档未重新构建 v3.0.0,也未运行 GUI 回归,因此不将历史手工观察视为当前版本验证结果。 - 关联 BUG / Fix:[可选] - 与页签切换后的绘制一致性相关:[`BUG-20260109-0002-TabControl切换后Table新旧内容重叠.md`](../BUG/BUG-20260109-0002-TabControl切换后Table新旧内容重叠.md) - 后续修复记录:[`Fix-BUG-20260109-0002-TabControl切换后Table新旧内容重叠.md`](../Fix/Fix-BUG-20260109-0002-TabControl切换后Table新旧内容重叠.md) - Commit: `5cb59b36525cde93de83313551296c6458694110` - PR:[可选] - 发布版本:[可选] v3.0.0 - 备注:[可选] - 资料来源:`StellarX功能_模块变更.pdf` 第 13-15 页,并以对应提交和历史 `CHANGELOG.md` 交叉核对。