0

我创建了一个 listView ,当用户单击一个元素并按下向上或向下箭头键时,该元素应该移动到那里并且该元素应该保持选中状态。它非常适合向上箭头键,但是当我在“case Keys.Down”开关下粘贴相同的代码时,只有 listView 中的 TOP 元素保持选中状态。这很奇怪!我还在 Keys.Left 和 Keys.Right 开关下粘贴了相同的代码,并且代码在那里完美运行,但是一旦我将开关更改为 Keys.Down,只有顶部元素保持选中状态。有谁知道为什么会发生这种情况?

4

1 回答 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 回答