# BUG-20260109-0001 > 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。 ## 基本信息 - ID: BUG-20260109-0001 - 标题: TextBox::setText 进入事件循环前调用崩溃 - 状态:已修复 - 严重性:S1 - 优先级:P0 - 模块: TextBox - 版本 / 分支: v2.3.2(基础版 EasyX + Win32) - 环境: Windows 10/11 x64 + Visual Studio 2022(MSVC)Debug / Release - 发现人: 用户 - 关联 Fix ID: Fix-BUG-20260109-0001 ## 问题描述 - 现象: 在 Window 尚未创建或图形上下文尚未初始化时调用 `TextBox::setText()` 设置默认文本,会触发 `TextBox::draw()`,进而进入依赖 EasyX 图形上下文的绘制 / 抓屏逻辑,导致访问冲突或中断。 - 影响范围: 所有“先创建控件并设置默认文本,再创建 Window / 挂载控件树”的初始化流程。 - 期望结果: `setText()` 只更新控件状态并标记需要重绘,不应在生命周期未就绪时主动绘制。 - 实际结果: `setText()` 内部直接调用 `draw()`,绘制链路在图形上下文未就绪时崩溃。 ## 复现信息 - 前置条件:[可选] Window / EasyX 图形上下文尚未初始化。 - 复现步骤: 1. 在创建 Window 或首次 `draw()` 前创建 TextBox。 2. 调用 `TextBox::setText()` 设置默认文本。 3. 随后才创建 Window 或将 TextBox 添加到 Canvas / Window。 4. 观察程序在 `setText()` 阶段崩溃。 - 复现概率:必现 - 最小复现 Demo: ```cpp Window window(1024, 768, NULL, RGB(255, 255, 255), "StellarX Application"); auto initLibPathBox = std::make_unique(230, 230, 700, 30); initLibPathBox->setText("textText"); window.addControl(std::move(initLibPathBox)); window.draw(); return window.runEventLoop(); ``` - 证据:PDF 历史记录描述 `setText()` 触发 `draw()` 后进入 `saveBackground()` / `getimage()` 等图形上下文相关逻辑。 ## 初步分析 - 疑似位置: `TextBox::setText()` - 触发条件: 控件属性设置发生在 Window 绘制 / EasyX 图形上下文初始化之前。 - 相关线索: - setter 不应带有依赖图形上下文的即时绘制副作用。 - `draw()` 会进入背景快照与图像抓取链路。 - 最近相关改动:[可选] ## 跟踪信息 - 首次发现时间: 2026-01-09 - 最后更新时间: 2026-09-19(从 PDF 整理入库) - 修复版本: v3.0.0 - 验证版本:[可选] v3.0.0 - 备注:[可选] 来源原始 ID 为 `BUG-20260109`;同日另有 Table 重影问题,入库时按顺序拆为 `0001` 与 `0002`。