如果单击 Button,则会选择 ListView 中的下一个项目。怎么做?
If a Button is clicked the next item in a ListView is selected. How to do that?
我有两个按钮,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;
}
}
有什么想法吗?
您不能直接将元素添加到 SelectedIndices
集合:它是只读的。
您可以改为设置 [ListViewItem].Selected = true
:该项目将被添加到集合中。
然后我们只验证下一个或上一个 Item 索引是否落在 ListView Items 集合范围内并且 select/unselect 它。
我添加了 ListView.Items[X].EnsureVisible()
,因此当项目为 selected/unselected 时,列表会上下滚动。
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();
}
我有两个按钮,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;
}
}
有什么想法吗?
您不能直接将元素添加到 SelectedIndices
集合:它是只读的。
您可以改为设置 [ListViewItem].Selected = true
:该项目将被添加到集合中。
然后我们只验证下一个或上一个 Item 索引是否落在 ListView Items 集合范围内并且 select/unselect 它。
我添加了 ListView.Items[X].EnsureVisible()
,因此当项目为 selected/unselected 时,列表会上下滚动。
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();
}