2016-09-23 14 views
0

私のコードで見てください これはコンボボックスのlostfocusイベントを呼び出している間無限ループになります 私はデータベースからいくつかのデータを必要とし、ユーザーは入力オプションでデータのみフォームリストを選択できます。私が正しくあなたを得た場合は、ユーザーのエントリがない場合WPF Combobox lostfocusイベントは無限ループになります

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にテキストを入力したい、といずれかの商品と一致する場合は、にある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; 
     } 
    } 

これはあなたの問題を解決するかどうか教えてください。

関連する問題