首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# RichTextBox 行數計算異常:Split 換行符產生多一空行的解決

     編輯:程式設計綜合問答

問題現象

  • richTextBox2 一開始 Lines.Count() 顯示 2 行(預期 0)。
  • 處理 5 行資料後顯示 6 行。

原因分析

程式碼:

richTextBox2.Text = richTextBox2.Text + linecell[2] + "\r\n";

每次迴圈在字串尾端追加 \r\n,導致:

  1. 第一次迴圈前 Text="",加上 "值\r\n" → 內容為 "值\r\n",Lines 解析為 ["值", ""](2 行)。
  2. 後續每次同理在末尾加換行,產生額外空行。

修正方案

// 方案 1:僅在非首行前加換行
if (linecell.Length > 2) {
    string val = linecell[2];
    richTextBox2.Text += (richTextBox2.Text == "" ? "" : "\r\n") + val;
}

// 方案 2:收集清單最後再 Join(效能佳、無空行)
var ids = new List<string>();
for (int i = 1; i < lines.Length; i++) {
    var cells = lines[i].Split(',');
    if (cells.Length > 2) ids.Add(cells[2]);
}
richTextBox2.Lines = ids.ToArray(); // 直接指派陣列,自動處理換行

// 方案 3:使用 StringBuilder
var sb = new StringBuilder();
for (...) { if (cells.Length > 2) { if (sb.Length > 0) sb.AppendLine(); sb.Append(cells[2]); } }
richTextBox2.Text = sb.ToString();

關鍵知識點

  • RichTextBox.Lines 為 string[],不包含尾端空行(若文字以換行結尾,最後一個元素為空字串會被保留,視框架版本而定)。
  • Text 屬性 getter/setter 會觸發完整重繪,大量資料請用 Lines 或 AppendText。
  • Environment.NewLine 在 Windows 為 \r\n,Split 時建議用 Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None) 兼容跨平台。

完整修正範例

private void button1_Click(object sender, EventArgs e) {
    string text = richTextBox1.Text;
    // 兼容 \r\n, \r, \n
    var lines = text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);

    var ids = new List<string>();
    for (int i = 0; i < lines.Length; i++) { // 從 0 開始,別跳過第一行
        var cells = lines[i].Split(',');
        if (cells.Length > 2) ids.Add(cells[2].Trim());
    }
    richTextBox2.Lines = ids.ToArray();
    MessageBox.Show($"共 {ids.Count} 筆身分證號碼");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved