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

C#实现RichTextBox1指定行复制到RichTextBox2并保留原有内容的问题

问题修复方案

现有代码的核心问题

  1. 直接执行richTextBox2.Text = ...会覆盖原有全部内容,导致New product 4-6丢失
  2. 剪贴板内容包含描述行(比如Description of product 1),但我们只需要Type行,现有循环错误地处理了这些无关行
  3. 索引对应逻辑混乱,没有正确匹配Type行和New product的前3行

修复后的代码实现

// 1. 从剪贴板提取内容,过滤出Type行(原RichTextBox1的[0],[2],[4]行)
string[] clipboardLines = Clipboard.GetText().Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
List<string> typeLines = new List<string>();
// 取索引0、2、4的行(对应Type 1、Type 2、Type 3)
for (int i = 0; i < clipboardLines.Length; i += 2)
{
    if (i <= 4) // 只保留前3个Type行
        typeLines.Add(clipboardLines[i].Trim());
}

// 2. 提取RichTextBox2的所有有效行,完整保留原有内容
string[] rt2Lines = richTextBox2.Lines.Where(line => !string.IsNullOrWhiteSpace(line)).ToArray();

// 3. 构建新的内容列表
List<string> newContent = new List<string>();
// 合并Type行和前3个New product行
for (int i = 0; i < Math.Min(typeLines.Count, 3); i++)
{
    newContent.Add(typeLines[i]);
    if (i < rt2Lines.Length)
        newContent.Add(rt2Lines[i]);
}

// 4. 追加RichTextBox2中剩余的行(New product 4-6)
for (int i = 3; i < rt2Lines.Length; i++)
{
    newContent.Add(rt2Lines[i]);
}

// 5. 更新RichTextBox2,避免清空原有内容
richTextBox2.Lines = newContent.ToArray();

代码说明

  • 先从剪贴板过滤出需要的Type行,自动跳过描述行
  • 完整保留RichTextBox2的所有行,避免直接赋值覆盖原有内容
  • 按顺序匹配Type行和对应的前3个New product行,确保对应关系正确
  • 追加RichTextBox2中第4行及以后的内容,保证New product 4-6不丢失
  • 使用Lines属性直接赋值,避免字符串拼接的性能问题和格式错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:23