我创建了一个listView,当用户点击一个元素并按下向上或向下箭头键时,该元素应移动到那里,元素应保持选中状态。它适用于向上箭头键,但是当我在开关“case Keys.Down”下粘贴SAME CODE时,只有listView中的TOP元素保持选中状态。这很奇怪!我还在Keys.Left和Keys.Right开关下粘贴了相同的代码,代码在那里工作得很好,但是一旦我将开关更改为Keys.Down,只有顶部元素保持选中状态。有谁知道为什么会这样?
答案 0 :(得分: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;
}