2013-03-21 4 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

ответ

1

ListView не имеет SelectedIndex свойства. Он имеет SelectedIndices собственности.

Получает индексы выбранных элементов в элементе управления.

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices; 

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

Вы правы, извините за мою ошибку. Благодарю. – David

+0

Я попытался добавить listView1.SelectedIndices = i; в инструкции foreach, но я получаю сообщение об ошибке. (Я все еще новичок, извините) – Abraham

+0

@Abraham Какая ошибка? Вы можете прочитать http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx –

0

использование попытки listView1.SelectedIndices собственность

+0

Я что-то упустил? Все, что я вижу под «listView1.SelectedX», это SelectedIndexChanged, SelectedIndices и SelectedItems. – Abraham

+0

обновлено, спасибо. – David

0

При удалении элемента, индекс «следующий» пункт такой же индекс, как тот, который вы просто удалены. Таким образом, я бы убедиться, что у вас есть listview1.IsSynchroniseDwithCurrentItemTrue = true, а затем

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

«CollectionViewSource не существует в текущем контексте» Мне не хватает инструкции using? – Abraham

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; 
} 
Смежные вопросы