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

问题描述 投票:0回答:1

我有两个按钮,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;
    }
}

有任何想法吗 ?

c# winforms listview button selection
1个回答
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 Button充当取消选择器:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.