如何将TextBox各行内容对应填充至ListView的不同列?
问题描述
我在谷歌上搜索后没找到相关实现示例,希望把TextBox的各行内容对应填入ListView的列中,比如第1行→第1列,第2行→第2列,第3行→第3列等。求VB.NET、C#或LINQ的实现示例。
当前错误效果
运行现有代码后,TextBox的每一行内容都会被重复填入ListView的所有列中,不符合预期。
已尝试的VB.NET代码
For Each strLine In TextBox42.Lines strLine.Split(vbNewLine) ListView5.Items.Add(New ListViewItem(New String() {strLine, strLine, strLine, strLine, strLine, strLine, strLine, Today.Date})) Next
需求效果
每次点击按钮时,将TextBox各行的内容对应填入ListView的一行中:第1行内容填第1列,第2行填第2列……暂无数据的列用短横线-填充,最后一列显示当前日期;后续可修改补充空列的内容。
其他尝试过的VB.NET代码
ListView5.Items.AddRange(Array.ConvertAll(Enumerable.Range(0, TextBox42.Lines.Length).ToArray, Function(x) New ListViewItem(New String() {TextBox42.Lines(x)})))
解决方案
VB.NET 实现
' 按实际列数修改此值,示例中为8列(前7列对应TextBox行,第8列是日期) Dim columnCount As Integer = 8 Dim textBoxLines As String() = TextBox42.Lines ' 初始化数组,所有列默认填充短横线 Dim itemContent(columnCount - 1) As String Array.Fill(itemContent, "-") ' 将TextBox行内容对应填充到列,避免索引越界 For i As Integer = 0 To Math.Min(textBoxLines.Length - 1, columnCount - 2) itemContent(i) = textBoxLines(i).Trim() Next ' 设置最后一列的日期 itemContent(columnCount - 1) = Today.Date.ToString() ' 添加到ListView ListView5.Items.Add(New ListViewItem(itemContent))
C# 实现
// 按实际列数修改此值,示例中为8列(前7列对应TextBox行,第8列是日期) int columnCount = 8; string[] textBoxLines = textBox42.Lines; // 初始化数组,所有列默认填充短横线 string[] itemContent = Enumerable.Repeat("-", columnCount).ToArray(); // 对应填充TextBox行内容,防止索引超出范围 for (int i = 0; i < Math.Min(textBoxLines.Length, columnCount - 1); i++) { itemContent[i] = textBoxLines[i].Trim(); } // 设置最后一列的日期 itemContent[columnCount - 1] = DateTime.Today.ToString(); // 添加到ListView listView5.Items.Add(new ListViewItem(itemContent));
关键说明
- 根据你的ListView实际列数调整
columnCount的值; - 用
Math.Min避免TextBox行数超过列数(除日期列)时的索引越界问题; Trim()用于去除每行内容的首尾空白,保证显示整洁;- 空列默认填充短横线,满足后续可修改的需求。
内容的提问来源于stack exchange,提问作者John Michael Wilkinson
相关产品推荐
相关产品推荐

