Если нажать кнопку, будет выбран следующий элемент в ListView.Как это сделать? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть две кнопки, Next и Previous.
Когда нажата кнопка Next, должен быть выбран следующий элемент в ListView.
Кнопка Previous должна работать так же, каккнопка Next, но в обратном направлении: должны быть выбраны предыдущие пункты.

Я пробовал это, но это не сработало:

private void button3_Click(object sender, EventArgs e)
{
    if (listView1.SelectedIndices < listView1.Items.Count - 1)
    {
        listView1.SelectedIndices = listView1.SelectedIndices + 1;
    }
}

Есть идеи?

1 Ответ

0 голосов
/ 03 марта 2019

Вы не можете напрямую добавить элемент в коллекцию 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...