2009-08-25 4 views
1

У меня есть ListViews ... У меня есть ListView (ListView1) с элементами, а другой (ListView2) пуст. Мне нужно, чтобы скопировать выбранные элементы из ListView1 в ListView2 в то же время я должен удалить проверяемый элемент в ListView1 с помощью C# ...checked listview items

Я использую окно форму ...

Заранее спасибо .. .

ответ

2

Что-то вроде этого? (Не проверено !!)

for (int i = ListView1.Items.Count - 1; i >= 0; i--) 
{ 
    if (ListView1.Items[i].Checked) 
    { 
    ListView2.Items.Add(ListView1.Items[i]); 
    ListView1.Items.Remove(ListView.Items[i]); 
    // OR 
    // ListView1.Items.RemoveAt(i); 
    } 
} 

EDIT:
Это могло бы быть лучше.

CheckedListViewCollection checked = ListView1.CheckedItems 
foreach (itm in checked) 
{ 
    ListView2.Items.Add(itm); 
    ListView1.Items.Remove(itm); 
} 
+0

Использование CheckedListViewCollection является приятным. – RRUZ

+0

Ваше второе решение - идеальный способ сделать это. Спасибо! – CharithJ

0

// Копировать ListView

for (int i = ListView1.Items.Count - 1; i >= 0; i--) 
{ 
    if (ListView1.Items[i].Checked) 
    { 
    ListView2.Add(ListView1.Items[i]); 
    } 
} 


//Delete checked 

ListView1.CheckedIndexCollection checkedItemsList = listView1.CheckedIndices;  
while (checkedItemsList.Count > 0) 
{ 
    listView1.Items.RemoveAt(checkedItemsList[0]); 
} 

Bye

+0

У вас есть ошибка в цикле for. Должен прочитать i--. Не i ++. –

+0

Видимо я тоже! : D –

+0

Спасибо, CKret. – RRUZ

1
while (listView1.CheckedItems.Count > 0) 
{ 
    ListViewItem item = listView1.CheckedItems[0]; 
    listView1.Items.Remove(item); 
    listView2.Items.Add(item); 
}

испытано.

Обратите внимание на порядок снятия и добавления элементов. Структура генерирует исключение, если вы пытаетесь добавить ListViewItem в несколько списков одновременно.