Вы не можете напрямую добавить элемент в коллекцию SelectedIndices
: он доступен только для чтения.
Вместо этого вы можете установить [ListViewItem].Selected = true
: элемент будет добавлен в коллекцию.
Затем мы просто проверяем, попадает ли следующий или предыдущий индекс элемента в границы коллекции ListView Items, и выбираем / отменяем его выбор.
Я добавил ListView.Items[X].EnsureVisible()
, поэтому список прокручивается вверх и вниз, когда элемент выбран / не выбран.
private void btnNext_Click(object sender, EventArgs e)
{
if (listView1.Items.Count == 0) return;
int currentItem = listView1.SelectedItems.Count == 0
? -1
: listView1.SelectedItems[listView1.SelectedItems.Count - 1].Index;
if (currentItem < listView1.Items.Count - 1) {
listView1.Items[currentItem + 1].Selected = true;
listView1.Items[currentItem + 1].EnsureVisible();
}
listView1.Focus();
}
При этом методе кнопка Previous
выбирает в обратном направлении:
private void btnPrevious_Click(object sender, EventArgs e)
{
if (listView1.Items.Count == 0) return;
int currentItem = listView1.SelectedItems.Count == 0
? -1
: listView1.SelectedItems[0].Index;
if (currentItem > 0)
{
listView1.Items[currentItem - 1].Selected = true;
listView1.Items[currentItem - 1].EnsureVisible();
}
listView1.Focus();
}
При этом другом методе кнопка Previous
действует как невыбирающий:
private void btnPrevious_Click(object sender, EventArgs e)
{
if (listView1.Items.Count > 0 && listView1.SelectedItems.Count > 0) {
int currentItem = listView1.SelectedItems[listView1.SelectedItems.Count - 1].Index;
listView1.Items[currentItem].Selected = false;
listView1.Items[currentItem].EnsureVisible();
}
listView1.Focus();
}