Keys.Down的行为与其他箭头键不同?

时间:2012-04-09 00:23:18

标签: c# listview scroll

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

1 个答案:

答案 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;
}
相关问题