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

为何RichTextBox中modifiedtext.Length为20而非16?附代码示例

RichTextBox修改文本后长度不符合预期的原因分析

问题背景

在C# WinForms的RichTextBox中执行代码,给选中文本的每行开头添加制表符(\t):

  • 原选中文本长度为11
  • 拆分后lines数组长度为5
  • 预期修改后的文本长度应为11+5=16,但实际输出为20

输入输出与控制台信息

输入RichTextBox内容

abc

dfg

1

输出RichTextBox内容

abc
    
    dfg
    
    1

控制台输出

selstart  : 0
sellength : 11
selstart2: 5
sellength2: 20
tab space.Length: 1
lines.Length: 5

执行代码

private void button_click0001(object sender, EventArgs e)       
{    
    int selstart = richTextBox1.SelectionStart;
    int sellength = richTextBox1.SelectionLength;  

    Console.WriteLine("selstart  : " + selstart );      //OUTPUT:0
    Console.WriteLine("sellength : " + sellength );     //OUTPUT:11

    string[] lines = richTextBox1.SelectedText.Split('\n');         
    for (int i = 0; i < lines.Length; i++)
    { 
        lines[i] = "\t" + lines[i];              
    }

    string modifiedtext = string.Join(Environment.NewLine, lines);
    richTextBox1.SelectedText = modifiedText;

    int selstart2 = selstart + ("\t".Length * lines.Length);
    int sellength2 = modifiedText.Length;

    Console.WriteLine("selstart2: " + selstart2);       //OUTPUT: 5
    Console.WriteLine("sellength2: " + sellength2);     //OUTPUT:20
    Console.WriteLine("tab space.Length: " + "\t".Length);  //OUTPUT:1
    Console.WriteLine("lines.Length: " + lines.Length);     //OUTPUT:5

    richTextBox1.Select(selstart2 , sellength2); 
}

原因分析

核心问题出在换行符的处理差异:

  • RichTextBox的SelectedText中,换行是以单个字符\n存储的。原选中文本长度11,其中包含4个\n(因为Split('\n')得到5行,说明有4个换行分隔符),这4个\n总长度为4。
  • 代码中用string.Join(Environment.NewLine, lines)拼接行时,Windows系统下Environment.NewLine是\r\n(两个字符)。原本的4个\n被替换成4个\r\n,这就额外增加了4个字符(每个换行多1个\r)。
  • 加上每行添加的5个\t(每个占1字符,共+5),总长度变化为:原长度11 + 5(制表符) + 4(换行符新增的\r)=20,和实际输出一致。

修正建议

如果要让修改后的文本长度符合预期的16,只需将拼接时的换行符改为\n,保持和原文本一致:

string modifiedtext = string.Join("\n", lines);

内容的提问来源于stack exchange,提问作者allingfin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:56:01