如果单击一个按钮,则会选择ListView中的下一项。怎么做?

时间:2019-03-03 18:52:31

标签: c# winforms listview button selection

我有两个按钮,NextPrevious
当按下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 :(得分:0)

您不能直接将元素添加到SelectedIndices集合中:它是只读的。
您可以改为设置[ListViewItem].Selected = true:该项目将被添加到集合中。

然后,我们只需验证下一个或上一个Item索引是否位于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();
}