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 は、Selected プロパティが true である ListViewItems を持つ ListView の単なるラッパーです。ただし、正しく機能するには、ListView が表示されている必要があります。

画面上で選択されていない ListView 項目のコレクションが必要な場合は、SelectedListViewItemCollection を使用しないでください。

于 2012-06-08T13:14:13.347 に答える
0

ListView コントロールの単一の項目であるListView.SelectedListViewItemCollectionから、リスト (またはコレクション) を取得する理由がわかりません。ListViewItemから選択されたアイテムのリストを取得するという逆のことが必要なようですListView.SelectedListViewItemCollection。あれは正しいですか?もしそうなら、それを達成できる1つの方法はどこにありますか。

オブジェクトのリストがあるUser場合、リストビューは次のように入力できます。

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

ここで、 はオブジェクトuserListの型付きリストです。その後、ListView で選択した項目を取得できます。UserList<User>

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 に答える