【问题标题】:Winform Column listWinform 列列表
【发布时间】:2014-07-10 08:09:41
【问题描述】:

我对编程很陌生,如果这是一个非常明显的问题,我深表歉意。我在网上搜索过,但还没有找到合适的答案。

我正在编写一个程序来解释文件流中索引中的字节。一旦它们被转换为人类可读的日期/字符串/整数等,我想使用 Winform 在列中显示结果。目前我使用一个列表框,只是显示每个条目以列分隔,但这感觉是一种非常笨拙的方式。

有人可以建议我如何将结果放入使用列的显示中吗?

【问题讨论】:

  • 想要将其显示在列中,而您将其显示在列中。有什么问题?您也可以使用 ListView、DataGrid 或 GridView,但原理是一样的...
  • 抱歉更正 - 我当前的设置是一个列表框,它只显示一行字符串中多个字段的每个条目。我想按列分隔这些。
  • 这就是 ListView 的用途。 (或者可能一个DataGridView)

标签: c# winforms listbox multiple-columns


【解决方案1】:

在您的情况下,使用ListView 比使用ListBox 更好。下面是一个示例,在 ListView 的不同列中显示字符串中的所有单词:

确保将以下属性设置为您的 ListView(此处名称为 ColumnsListView):

ColumnsListView.View = View.Details;

这个方法接受一个字符串,用空格分割它并为每个值添加一列:

private void SetListView(string input)
{
    var values = input.Split(' ');
    ColumnsListView.Columns.Add("Column1");
    var item = new ListViewItem(values[0]);

    for (var i = 1; i < values.Length; i++)
    {
        ColumnsListView.Columns.Add("Column" + (i+1));
        item.SubItems.Add(new ListViewItem.ListViewSubItem { Text = values[i] });
    }

    ColumnsListView.Items.Add(item);
}

当使用 LinQ 的 Skip() 方法添加带有子项的项目时,可以采用不同的方式:

private void SetListView(string input)
{
    var values = input.Split(' ');

    for (var i = 0; i < values.Length; i++)
        ColumnsListView.Columns.Add("Column" + (i + 1));

    var item = new ListViewItem(values[0]);
    item.SubItems.AddRange(values.Skip(1).ToArray());
    ColumnsListView.Items.Add(item);
}

更新:

如果您想使用DataGridView,这是一个示例:

private void SetDataGridView(string input)
{
    var values = input.Split(' ');

    for (var i = 0; i < values.Length; i++)
        ColumnsDataGridView.Columns.Add("Column" + (i + 1), "Column" + (i + 1));

    ColumnsDataGridView.Rows.Add(values);
}

【讨论】:

  • 谢谢。我会试一试,看看这是否适用于我拥有的数据。不同的列是否能够容纳不同的类型,还是我必须先转换为字符串?
  • 显示的值总是一个字符串,尽管包含的项目可以是任何东西。就像 ListBoxItem 可以是 Person 类的实例,并且该人的名字显示在项目中。
猜你喜欢
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多