我创建了一个 listView ,当用户单击一个元素并按下向上或向下箭头键时,该元素应该移动到那里并且该元素应该保持选中状态。它非常适合向上箭头键,但是当我在“case Keys.Down”开关下粘贴相同的代码时,只有 listView 中的 TOP 元素保持选中状态。这很奇怪!我还在 Keys.Left 和 Keys.Right 开关下粘贴了相同的代码,并且代码在那里完美运行,但是一旦我将开关更改为 Keys.Down,只有顶部元素保持选中状态。有谁知道为什么会发生这种情况?
问问题
210 次
1 回答
2
在向下的情况下,偏移量应该不同。您使用相同的( -1 )。在向下它应该是 +1 像这样:
newSpot = listOrderNames.IndexOf(listView.SelectedItems[0].Text) + 1;
index = listOrderNames.IndexOf(listView.SelectedItems[0].Text) + 1;
另外,你可以把它写得更干净
int offset = 0;
case Keys.Up:
offset = -1;
break;
case Keys.Down:
offset = 1;
break;
if (listView.SelectedItems.Count > 0)
{
int newSpot = 0;
int index = 0;
if (listOrderNames.IndexOf(listView.SelectedItems[0].Text) == 0)
{
reorder(0, true);
newSpot = listOrderNames.Count + offset;
}
else
{
newSpot = listOrderNames.IndexOf(listView.SelectedItems[0].Text) + offset;
index = listOrderNames.IndexOf(listView.SelectedItems[0].Text) + offset;
swap(listOrderNames.IndexOf(listView.SelectedItems[0].Text), newSpot);
}
for (int i = 0; i < listView.Items.Count; i++)
{
listView.Items[i].Selected = false;
}
listView.Items[newSpot].Selected = true;
}
于 2012-04-09T01:00:03.730 回答