You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:22:23