2010-07-28 119 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

相關問題