0

我想从 ListViewItem 创建一个 ListView.SelectedListViewItemCollection 对象。这就是我的方法:

public ListView.SelectedListViewItemCollection getSelectedListViewItemCollection(ListViewItem myListViewItem)
{
    ListView myListView = new ListView();
    ListViewItem listViewItem = (ListViewItem)myListViewItem.Clone();
    listViewItem.Selected = true;
    myListView.Items.Add(listViewItem);
    return new ListView.SelectedListViewItemCollection(myListView);
}

但是,会返回一个空列表。(该列表应该包含给定的 listViewItem)我的方法有什么问题?

4

2 回答 2

0

SelectedListViewItemCollection 只是 ListView 的包装器,其中 ListViewItems 的 Selected 属性为 true。但是,ListView 必须可见才能正常工作。

如果您想要拥有一组未在屏幕上选择的 ListView 项目,那么您不应该使用 SelectedListViewItemCollection。

于 2012-06-08T13:14:13.347 回答
0

我不确定你为什么要从一个 ListView 控件中的单个项目 a 中获取一个列表(或集合),这就是 aListView.SelectedListViewItemCollectionListViewItem什么?似乎您想要相反的情况,即从ListView.SelectedListViewItemCollection. 那是对的吗?如果是这样,您可以在哪里实现这一目标。

鉴于您有一个User对象列表,您的列表视图可以这样填充:

listview.BeginUpdate();
foreach (User u in userList)
{
    ListViewItem item = new ListViewItem() { Text = u.Name, Tag = u};
    listview.Items.Add(item);
}
listview.EndUpdate();

其中userList是一个类型化的User对象列表,即List<User>. 然后您可以在 ListView 中获取所选项目:

ListViewItem[] collection = GetSelectedItems(listview);

List<string> names = new List<string>();
Parallel.ForEach(collection, item =>
{
    User u = item.Tag as User;
    names.Add(u.Name);
});

private static ListViewItem[] GetSelectedItems(ListView listView)
{
    ListViewItem[] selectedItems = new ListViewItem[0];

    MethodInvoker miGetSelectedItems = delegate
    {
        selectedItems = new ListViewItem[listview.SelectedItems.Count];
        listview.SelectedItems.CopyTo(selectedItems, 0);
    };

    if (listview.InvokeRequired)
    {
        listview.Invoke(miGetSelectedItems);
    }
    else
    {
        miGetSelectedItems();
    }

    return selectedItems;
}

我希望这将有所帮助。祝你好运!

于 2012-06-08T13:31:26.690 回答