我有一個ListView1的其中顯示2列表列表視圖顯示錯誤
List<string> pths;
List<string> rec;
public void Disp()
{
DisplayListInColumns(listView1, pths, 0);
DisplayListInColumns(listView1, rec, 1);
}
private static void DisplayListInColumns(ListView listView, List<string> values, int columnIndex)
{
for (int index = 0; index < values.Count; index++)
{
while (index >= listView.Items.Count)
{
listView.Items.Add(new ListViewItem());
}
ListViewItem listViewItem = listView.Items[index];
while (listViewItem.SubItems.Count <= columnIndex)
{
listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem());
}
listViewItem.SubItems[columnIndex].Text = values[index];
}
}
我現在用的是全球列表進行更改,並在ListView1的顯示,但C#的WinForms後,才用戶單擊apply_button將更改保存(在xml中)。
編輯和添加詳細信息按鈕工作正常,完美顯示。但是,當我刪除數據時,我會引發錯誤。
以下是刪除操作:
//Configuration - DELETE button
private void button6_Click(object sender, EventArgs e)
{
string select = null;
if (listView1.SelectedItems.Count > 0)
{
select = (listView1.SelectedItems[0].Text);
}
int count = listView1.SelectedItems[0].Index;
if (select != null)
{
pths.RemoveAt(count);
rec.RemoveAt(count);
string s = String.Join("; ", pths.ToArray());
string r = String.Join("; ", rec.ToArray());
//MessageBox.Show(s);
//MessageBox.Show(r);
}
Disp();
}
我想試了幾次後,我用食指去錯了。即使在刪除後,調試時,我得到的listView.Items.Count = 5.
我猜計數仍然是5(樣本-5列表中的字符串)時刪除它應該減少到4和索引0-3相應。 我正在以下eror
ArgumentOutOfRangeException at pths.RemoveAt(count)
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
作爲替代我試圖pths.Remove(select);
,但沒有解決這個問題。
任何幫助,將不勝感激。謝謝
您希望在ListView指數在列表<>的指數相匹配。當你刪除一個項目時,這將停止工作。既然你從List <>中刪除它,但不是ListView。所以最終「count」會比List <>中的最後一個索引大。 KABOOM。 – 2013-03-27 18:47:20
謝謝@HansPassant我明白這個錯誤,只是困惑於一個合適的解決方案。 – 2013-03-27 19:04:55
我不清楚爲什麼你在ListView中留下一個已刪除的項目。刪除它也將是簡單的解決方案。如果你需要離開它,那麼你還需要一個將listview項目映射到列表項目的字典。 – 2013-03-27 19:10:13