【问题标题】:Adding multiple sub items to a ListViewItem using AddRange fails使用 AddRange 将多个子项添加到 ListViewItem 失败
【发布时间】:2013-09-14 08:19:32
【问题描述】:

使用时

lvi.SubItems.AddRange(new ListViewItem.ListViewSubItem[5]);
Debug.Assert(lvi.SubItems.Count == 5);

assert 失败,lvi.SubItems.Count 为 1,访问lvi.SubItems[1] 失败。

什么?那不应该加5个项目吗?

(澄清一下:我知道我可以使用 Add() 单独添加它们 - 我在问为什么这不起作用)


更大的上下文:listView1 是详细视图中的 winforms 列表视图,添加了 6 列:

   public Form1()
    {
        InitializeComponent();
        ListViewItem lvi = new ListViewItem();
        listView1.Items.Add(lvi);

        int expectedCount = 6;
        Debug.Assert(listView1.Columns.Count == expectedCount);
        if (lvi.SubItems.Count != expectedCount - 1)
        {
            lvi.SubItems.Clear();
            lvi.SubItems.AddRange(new ListViewItem.ListViewSubItem[expectedCount - 1]);
            Debug.Assert(lvi.SubItems.Count == expectedCount - 1);
        }

    }

(VS Express 2013RC,VS 2008 Pro)

【问题讨论】:

    标签: c# winforms listview


    【解决方案1】:

    下面试试

    lvi.BeginUpdate();
    for (int i = 0; i < 5; i++)
       lvi.SubItems.Add(String.Empty); // adding empty items 
    lvi.EndUpdate();
    Debug.Assert(lvi.SubItems.Count == expectedCount - 1);
    

    如果你想使用 AddRange

    vi.SubItems.AddRange(Enumerable.Repeat(string.Empty, expectedCount - 1).ToArray());
    

    【讨论】:

    • 是的,我有一个问题,我想知道为什么 AddRange 不起作用(或者我是否做错了什么)
    • 当你添加ListViewSubItem[expectedCount - 1]时,所有子项都是空的,这可能是这个原因
    • d'哦,我在考虑结构,而不是对象。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多