2010-07-28 117 views
4

我试图编程两个按钮来模仿向上/向下箭头键行为,这意味着当我按下按钮时,它向上移动我的列表框中的一个项目等等。我写了下面的代码:以编程方式选择下一个列表框项目

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; 
    } 
} 

这个工作,但是,按压项目失去了选择按钮时...选择index的设置正确(其他databinded物品,绑定到选定的项目显示正确的值)但列表框项目不再突出显示。如何将选定项目设置为突出显示?

回答

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; 
}    
+0

是的,这样更好。只添加如果(listbox_copy.selectedindex == 0){listbox_copy.focus();},因为如果第一个项目被选中,我再次按下它删除焦点.. – internetmw 2010-07-28 13:48:54

+0

就个人而言,我不会打扰封装的Focus()方法一个if语句。我只是点击每个按钮来完成上/下。 – GenericTypeTea 2010-07-28 14:03:08

+0

你真好!谢谢 – internetmw 2010-07-28 14:05:21

5

您的列表框可能刚刚失去焦点。只要做以下设置SelectedIndex后:

listBox_Copy.Focus(); 
+0

谢谢!你碰巧知道如何让列表框滚动,如果一个项目被选中,这是不可见的? – internetmw 2010-07-28 13:44:16

+0

@internetwjm:你可能在寻找'ListBox.TopIndex'。有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.topindex.aspx – 2010-07-28 13:46:29

+0

System.Windows.Controls.Listbox不包含topindex的定义... ?我必须包含某种参考吗? – internetmw 2010-07-28 13:58:03

相关问题