0

我希望从列表视图中获取选定的项目,但不是通过单击它,因为我已经有一个功能可以做到这一点。我想用我的向上和向下箭头来做到这一点。

我已经有了一个方法,但是它抛出了一个异常,任何人都可以帮助重构它吗?这是下面的方法

private void lvViewFile_KeyDown(object sender, KeyEventArgs e)
{
    ListView lvTemp = (ListView)sender;
    if (e.KeyCode == Keys.Up)
    {
        if (lvTemp.Focused == true)
        {
            var selected = this.lvCategory.SelectedItems[0].Focused;
        }
    }
    else if (e.KeyCode == Keys.Down)
    {
        if (lvTemp.Focused == true)
        {
            var selected = this.lvCategory.SelectedItems[0].Focused;
        }
    }
}
4

2 回答 2

2

一个旧帖子,但我调整了接受的答案以在使用箭头键导航 ListView 时显示来自数据库的数据。这可能对其他人有帮助:

ListView lv = sender as ListView;
if (lv.Focused) // which it should be as the user is running arrow keys on it!
{
    int selected = lv.FocusedItem.Index; // gets the index of the CURRENT ListViewItem (Not the one you see highlighted after arrow key movement)
    switch (e.KeyCode) // Can use if/else here if preferred
    {
        case Keys.Up:
            //Change index to the row above the current one
            selected--;
            if(selected < 0) //check if already on the first row
            {
                selected = 0;
            }
            break;
        case Keys.Down:
            //Change index to the row below the current one
            selected++;
            if(selected > lv.Items.Count - 1) //check if index out of range
            {
                selected = lv.Items.Count - 1;
            }
            break;
    }
    // Carry out your choice of action. (This one reads a database and fills fields)
    FillFields(lvClients.Items[selected].SubItems[0].Text);
}
于 2018-09-20T12:38:12.083 回答
1

这似乎正是我想要的。

if (e.KeyCode == Keys.Up)
{
    if (lvTemp.Focused == true)
    {
        var selected = lvTemp.FocusedItem.Index;
        if (selected.Equals(0))
        {
            enableMoveDown();
        }
        else if (selected.Equals(lvCategory.Items.Count - 1))
        {
            enableMoveUp();
        }
        else
        {
            enableMoveUpMoveDown();
        }
    }
}
else if (e.KeyCode == Keys.Down)
{
    if (lvTemp.Focused == true)
    {
        var selected = lvTemp.FocusedItem.Index;
        if (selected.Equals(0))
        {
            enableMoveDown();
        }
        else if (selected.Equals(lvCategory.Items.Count - 1))
        {
            enableMoveUp();
        }
        else
        {
            enableMoveUpMoveDown();
        }
    }
}
于 2013-02-18T10:09:46.620 回答