我正在尝试从 listView1 中删除多个所选项目,但是在删除一个项目之后,该列表似乎没有得到更新,因此程序出现故障,即删除了一些错误的项目并跳过一些正确的。
删除一个项目后, GUI框会更新,即项目从框中消失。但是第一个之后的下一个项目不应该是它应该是什么。
示例:我选择索引为0,1,3,4
的项目结果: 0被删除,然后删除3,然后删除5,即使我没有选择5。
注意:正确选择了项目(我测试过)。问题出在下面的代码中。
这是我的代码:
private: System::Void delSelected_LinkClicked(System::Object^ sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^ e)
{
int count = listView1->SelectedItems->Count;
ListView::SelectedIndexCollection^ indexes = this->listView1->SelectedIndices;
System::Collections::IEnumerator^ myEnum1 = indexes->GetEnumerator();
MessageBox::Show(count.ToString(), "MessageBox Test", MessageBoxButtons::OK, MessageBoxIcon::Information);
while (myEnum1->MoveNext()) {
int index = safe_cast<int>(myEnum1->Current);
//MessageBox::Show(index.ToString()+". "+listView1->Items[index]->Text, "MessageBox Test", MessageBoxButtons::OK, MessageBoxIcon::Information);
listView1->Items->Remove(listView1->Items[index]);
}
}
我想知道在删除一个项目或任何其他解决方法后更新列表的方法。
感谢。
答案 0 :(得分:1)
Listview项目的索引将被删除(即,它们在列表中的位置,从0到n-1)。
问题是,当删除列表视图项时,所有后续项都会向上移动一个位置。例如,如果删除项索引1,则先前索引为2的项将成为新索引1,依此类推。
解决方案是:
无论您选择哪种解决方案,都需要确保在开始之前对要删除的索引列表进行排序。
答案 1 :(得分:0)
这是一个直截了当的方式来赞美乔纳森的回答:
while (listView1->SelectedItems->Count > 0)
{
listView1->Items->Remove(listView1->SelectedItems [0]);
}
答案 2 :(得分:0)
以下是我在Jonathan和Raheel的答案的帮助下做到的:
while (listView1->SelectedItems->Count > 0)
listView1->Items->Remove(listView1->SelectedItems[0])