如何将RichEdit多行字符串存入字符串数组及回显为空问题排查
问题根源
- 索引越界隐患:
TRichEdit.Lines属于TStrings类型,默认索引从 0 开始,你直接用1~26取值,如果原内容不足27行(索引0到26)会直接触发越界错误。 - 回显为空的核心原因:调用
redOutOffset.Clear之后,Lines的Count属性会重置为0,此时Strings[K]指向的是不存在的行索引,直接赋值不会新增行,也不会触发显示,属于无效操作。
正确实现代码
procedure TfrmEncryption.sedOffsetClick(Sender: TObject); var K : integer; begin // 先判断现有行数是否足够,避免越界 if redOutOffset.Lines.Count < 26 then Exit; // 保存内容到数组,此处假设数组按1基设计,若为0基可直接循环0~25无需索引转换 for K := 1 to 26 do begin arrOffset[K] := redOutOffset.Lines.Strings[K-1]; end; redOutOffset.Clear; // 回显使用Add方法新增行,不要直接给不存在的Strings[K]索引赋值 for K := 1 to 26 do begin redOutOffset.Lines.Add(arrOffset[K]); end; end;
补充说明
如果需要严格匹配原行号位置赋值,可在清空后先插入26条空行再给指定索引赋值,和上述Add方法效果一致。空行、特殊格式的行内容都可以正常保存和回显。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

