AI 的回复一写完,左边那块对话框就黑成一片。不是花屏,是整块黑,一个字都看不见。鼠标滚轮滚一下,字又回来了。

第一次见我以为是自己电脑的事,切出去又切回来,没用。后来摸出规律了:AI 回复越长、里面越夹那种很长的命令(命令会自动折行)越容易黑;短回复基本不犯。
AI助手.jpg

那块是个 RichTextBox。整个七亿批量远程管理工具是 WinForms 写的,AI 助手的对话区就是这一个控件撑起来的。

我一开始的追加写法是这样的:先把 AI 这段文字 AppendText 进去,再把刚追加的那一段选起来,把字体颜色改掉。问题就出在「选中再改格式」这一步——它会让 RichTextBox 对整篇文档重排一遍。平时看不出来,可 AI 的回复里常有命令行,一折行,布局一下子变长一大截。偏偏就在这个时候,我代码里紧跟着调了 ScrollToCaret(),想让它滚到底部。

ScrollToCaret 是按插入点的位置滚。文档刚重排完,那个位置算出来是偏的,一滚就滚过了头,滚到正文底下的空白区去了。所以你看到的是整块黑——不是没内容,是视口停在一片空地方。

改的时候我分了两步,也是分了两版才对。

第一版我只动了追加方式:先把插入点的字体、颜色设好,再往里追加文字,不再回头去选、去改。这版治的是「重排」。结果——还是黑。滚动那一下的问题,我没动。

第二版才动滚动。不再用 ScrollToCaret 滚到「文档最末尾」,改成滚到「最后一个有字的字符」。这俩听着差不多,差得可不近:RichTextBox 的末尾经常挂着个换行、一个空行,你滚到最末尾,等于滚到空白。改成找最后一个非空字符的位置,一滚就到位。另外加了一道兜底:先滚一次,稳个几十毫秒,再滚一次,怕布局还没算完。

两版合起来,黑屏没了。

有个细节挺气人:第一版改完我以为稳了,还高兴了一下,切出去干了会儿别的,回来随手测个长回复,又黑了。那天从 V95 改到 V113,18 个版本里,这种「以为好了其实没好」,占了一多半。七亿批量远程管理工具这个 AI 助手,界面这块的坑基本都栽在这类地方——不是功能不对,是「看着对」。

有一说一,界面这类问题我以前也踩过。之前九宫格点开一台 Linux 白屏那次(那篇在这里)也是界面上的毛病,但根因完全不是一回事:那个是窗口没拉起来,这个是光标位置算错了。

改完到现在,它没再黑过。就是那版白高兴一场,我到现在还记得。