如何在Multiline模式RichTextBox中根据光标选中完整折行值?
解决RichTextBox自动折行时选中整个实际行的问题
修正后的代码
private void SelectLine(RichTextBox rtb) { if (rtb.Lines.Length == 0) return; // 获取当前光标位置对应的实际行(Lines数组中的行号) int currentActualLine = rtb.GetLineFromCharIndex(rtb.SelectionStart); // 获取该实际行的起始字符索引 int actualLineStartIndex = rtb.GetFirstCharIndexFromLine(currentActualLine); // 获取该实际行的文本长度 int actualLineLength = rtb.Lines[currentActualLine].Length; // 选中整个实际行 rtb.Select(actualLineStartIndex, actualLineLength); }
关键修改说明
- 替换原代码中依赖显示行的
GetFirstCharIndexOfCurrentLine(),改用GetFirstCharIndexFromLine(currentActualLine)获取**实际逻辑行(Lines数组中的行)**的起始字符索引,该方法会忽略自动折行的影响,直接定位到逻辑行的开头。 - 通过
rtb.SelectionStart获取点击后的光标位置,再用GetLineFromCharIndex()映射到Lines数组对应的实际行号,确保无论点击自动折行后的哪一行,都能锁定到同一个逻辑行。
原问题根源
原代码中GetFirstCharIndexOfCurrentLine()返回的是自动折行后当前显示行的首字符索引,而非Lines数组中逻辑行的起始位置,导致选中范围仅从点击的显示行开始,无法覆盖整个逻辑行。
内容的提问来源于stack exchange,提问作者Adam Kotvas
相关产品推荐
相关产品推荐

