2016-09-23 15 views
0

請看我的代碼, 這將成爲一個無限循環,同時調用組合框的lostfocus事件 我需要從數據庫中的一些數據和用戶可以選擇數據只有形式列表與打字選項。WPF Combobox lostFocus事件成爲一個無限的lopp

mainwindow.xaml

<Grid> 
    <TextBox x:Name="txt1" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" Margin="112,10,0,0"/> 
    <ComboBox x:Name="cmb" GotFocus="cmbgotfocus" LostKeyboardFocus="cmblost" KeyDown="cmbkeydown" IsEditable="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="238" Margin="112,50,0,0" /> 
</Grid> 

private void cmbkeydown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Return || e.Key == Key.Escape) 
     { 
      cmb.IsDropDownOpen = false; 
     } 
     else 
     { 
      cmb.IsDropDownOpen = true; 
     } 
    } 

    private void cmblost(object sender, RoutedEventArgs e) 
    { 
     if (cmb.SelectedIndex < 0 && cmb.Text!="") 
     { 
      MessageBox.Show("Please select a valid data from list only", "Warning"); 
      cmb.Focus(); 
     } 
    } 
+0

你有沒有試過看看調試工具會發生什麼? –

+0

在lostfocus處理程序中調用cmb.Focus()可能不是一個好主意 – vkluge

回答

0

如果我沒有得到你,你想用戶鍵入ComboBox一些文本,如果用戶的條目不匹配任何項目,重點應保留在ComboBox中的TextBox

<ComboBox x:Name="Cmb1" IsEditable="True" 
      Control.PreviewLostKeyboardFocus="Control_PreviewLostKeyboardFocus" ...> 

處理代碼:

private void Control_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
    { 
     if (!(e.OriginalSource is TextBox)) return; 

     TextBox tb = (TextBox)e.OriginalSource; 
     if (Cmb1.SelectedIndex < 0) 
     { 
      Cmb1.Text = ""; 
      e.Handled = true; 
     } 
    } 

請告訴我們,如果這能解決您的問題。