2013-03-21 151 views
4

下一個項目我有,消除當前所選的項目在ListView選擇的ListView

listView1.Items.Remove(listView1.SelectedItems[0]); 

如何選擇刪除選定的一個後在ListView接下來的一個方法是什麼?

我想是這樣

var index = listView1.SelectedItems[0].Index; 
listView1.Items.Remove(listView1.SelectedItems[0]); 
listView1.SelectedItems[0].Index = index; 

但我得到的錯誤

Property or indexer 'System.Windows.Forms.ListViewItem.Index' cannot be 
assigned to -- it is read only 

謝謝。

+0

變化'listView1.SelectedItems [0]的.index =指數;'到'listView1.SelectedIndex = index;' – ryrich 2013-03-21 14:16:42

回答

1

ListView沒有SelectedIndex財產。它有一個SelectedIndices屬性。

獲取控件中所選項目的索引。

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices; 

foreach (int i in indexes) 
{ 
// 
} 
+1

你是對的,對不起我的錯誤。謝謝。 – David 2013-03-21 14:19:55

+0

我試着添加listView1.SelectedIndices = i;在foreach語句中,但是我得到一個錯誤。 (我還是個初學者,對不起) – Abraham 2013-03-21 14:25:11

+0

@Abraham什麼是錯誤?您可以閱讀http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx – 2013-03-21 14:26:05

0

嘗試使用listView1.SelectedIndices財產

+0

我錯過了什麼?我所看到的「listView1.SelectedX」下面是SelectedIndexChanged,SelectedIndices和SelectedItems。 – Abraham 2013-03-21 14:17:34

+0

已更新,謝謝。 – David 2013-03-21 14:20:21

0

如果你刪除了某個項目,「下一個」項的索引是相同的索引剛刪除的一個。所以,我會確保你有listview1.IsSynchroniseDwithCurrentItemTrue = true然後

var index = listView1.SelectedItems[0].Index; 
listView1.Items.Remove(listView1.SelectedItems[0]); 
CollectionViewSource.GetDefaultView(listview).MoveCurrentTo(index); 
+0

「CollectionViewSource在當前上下文中不存在」我錯過了使用語句嗎? – Abraham 2013-03-21 14:31:18

0

我在下面的方式做到了這一點:

int selectedIndex = listview.SelectedIndices[0]; 
selectedIndex++; 
listview.Items[selectedIndex].Selected = true; 
0

我其實已經做到這一點:

 int[] indicies = new int[listViewCat.SelectedIndices.Count]; 
     listViewCat.SelectedIndices.CopyTo(indicies, 0); 
     foreach(ListViewItem item in listViewCat.SelectedItems){ 
      listViewCat.Items.Remove(item); 
      G.Categories.Remove(item.Text); 
     } 
     int k = 0; 
     foreach(int i in indicies) 
      listViewCat.Items[i+(k--)].Selected = true; 
     listViewCat.Select(); 

到得到它的工作,其他解決方案都沒有爲我工作。

希望更有經驗的程序員可以提供更好的解決方案。

1

我不得不的一行代碼添加到前面的回答以上,再加上一個檢查,以驗證計數不超過:

int selectedIndex = listview.SelectedIndices[0]; 
selectedIndex++; 
// Prevents exception on the last element:  
if (selectedIndex < listview.Items.Count) 
{ 
    listview.Items[selectedIndex].Selected = true; 
    listview.Items[selectedIndex].Focused = true; 
}