richTextBox2 一開始 Lines.Count() 顯示 2 行(預期 0)。程式碼:
richTextBox2.Text = richTextBox2.Text + linecell[2] + "\r\n";
每次迴圈在字串尾端追加 \r\n,導致:
Text="",加上 "值\r\n" → 內容為 "值\r\n",Lines 解析為 ["值", ""](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} 筆身分證號碼");
}