以编程方式选择下一个列表框项

时间:2010-07-28 13:29:15

标签: c# listbox selectedindex

我正在尝试编程两个按钮来模仿向上/向下箭头键行为,这意味着当我按下按钮向上时,它会向上移动列表框中的一个项目,依此类推。我写了以下代码:

private void mainlistup(object sender, System.Windows.RoutedEventArgs e)
{
    if (listBox_Copy.SelectedIndex != -1 &&
        listBox_Copy.SelectedIndex < listBox_Copy.Items.Count &&
        listBox_Copy.SelectedIndex !=1)
    {
        listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex - 1;
    }
}

private void mainlistdown(object sender, System.Windows.RoutedEventArgs e)
{
    if (listBox_Copy.SelectedIndex < listBox_Copy.Items.Count &&
       listBox_Copy.SelectedIndex != -1)
    {
        listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex + 1;
    }
}

然而,当按下该按钮时,该项目将失去其选择...正确设置选择索引(其他数据绑定项目,绑定到所选项目显示正确的值)但列表框项目不再突出显示。如何将所选项目设置为突出显示?

2 个答案:

答案 0 :(得分:5)

您的ListBox可能刚刚失去焦点。设置SelectedIndex后,请执行以下操作:

listBox_Copy.Focus();

答案 1 :(得分:2)

正如GenericTypeTea所说,这听起来很可能与失去焦点有关。然而,另一个问题是您的代码过于复杂,并且不会让您转到顶部的项目。我建议将其更改为:

向上移动

if (listBox_Copy.SelectedIndex > 0)
{ 
     listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex - 1; 
}

向下移动

if (listBox_Copy.SelectedIndex < listBox_Copy.Items.Count - 1)
{
     listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex + 1;
}