我想从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) 我的方法出了什么问题?
答案 0 :(得分:0)
SelectedListViewItemCollection只是ListView的包装器,ListViewItems的Selected属性为true。但是,ListView必须可见才能正常工作。
如果您想要的是拥有未在屏幕上选择的ListView项目集合,则不应使用SelectedListViewItemCollection。
答案 1 :(得分:0)
我不确定你为什么要从ListView.SelectedListViewItemCollection
得到一个列表(或集合),这是一个ListViewItem
,它是ListView控件中的单个项目?看起来您会想要反转,即从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;
}
我希望这会有所帮助。祝你好运!