C#实现RichTextBox1指定行复制到RichTextBox2并保留原有内容的问题
问题修复方案
现有代码的核心问题
- 直接执行
richTextBox2.Text = ...会覆盖原有全部内容,导致New product 4-6丢失 - 剪贴板内容包含描述行(比如Description of product 1),但我们只需要Type行,现有循环错误地处理了这些无关行
- 索引对应逻辑混乱,没有正确匹配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
相关产品推荐
相关产品推荐

