【问题标题】:Can't see ListViewItems added programatically to a ListView in a UserControl?看不到以编程方式添加到 UserControl 中的 ListView 的 ListView 项?
【发布时间】:2011-07-05 22:44:33
【问题描述】:

我在详细信息模式下的用户控件中有一个 ListView,其中包含一列。我通过设计器添加了一个项目,它显示得很好。但是,我以编程方式添加的任何内容都不会显示在列表中。 ListView.Items.Count 属性是正确的。

我已将添加代码和列表视图复制到主窗体中,一切正常。

// user control
public void AddFiles(IEnumerable<string> files)
{
    // this doesn't work - list view doesn't show any new files
    ListViewItem[] items = files.Select(file => new ListViewItem(file)).ToArray();
    listView1.Items.AddRange(items);
}

// main form
private void AddFiles(IEnumerable<string> files)
{
    // call to the user control
    fileList.AddFiles(files);

    // test code works correctly - can see the added files in the list view
    ListViewItem[] items = files.Select(file => new ListViewItem(file)).ToArray();
    listView1.Items.AddRange(items);
}

【问题讨论】:

    标签: c# .net winforms listview user-controls


    【解决方案1】:

    我有一个与 UserControl 类似的功能,如下所示:

    using ListViewCollection = System.Windows.Forms.ListView.ListViewItemCollection;
    
    void FillDirectories ( )
    {
        IEnumerable<DirectoryInfo> pathDirInfos = currentPath.EnumerateDirectories ( );
    
        var dirItems = ( from d in pathDirInfos
                         select new ListViewItem
                         {
                             Name = d.Name,
                             Text = d.Name,
                         } )
                       .ToArray ( );
    
        ListViewCollection listItems = new ListViewCollection ( uxExplorerListView );
        listItems.AddRange ( dirItems );
    }
    

    我看到的唯一区别是我正在创建一个 ListView.ListViewItemColleciton,它将拥有的 ListView 控件传递给构造函数。

    【讨论】:

      【解决方案2】:

      当您以编程方式执行此操作时,您需要首先创建至少一列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 2010-10-14
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        相关资源
        最近更新 更多