0

私の問題は次のとおりです。

ユーザーはアドレスを検索できます。何も見つからなかった場合、ユーザーにはメッセージボックスが表示されます。ENTER を押して閉じることができます。ここまでは順調ですね。SearchAddresses() の呼び出しは、ENTER を押して開始することもできます。そして、ENTER (メッセージボックスを非表示にする) ごとに新しい検索が開始されるため、ユーザーは無限ループに陥っています。

コードビハインドは次のとおりです。

private void TxtBoxAddress_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
            btnSearch_Click(sender, e);
    }


private void queryTask_Failed(object sender, TaskFailedEventArgs e)
    {
        //throw new NotImplementedException();
        MessageBox.Show("*", "*", MessageBoxButton.OK);
        isMapNearZoomed = false;
    }

そしてここにxamlコード:

<TextBox Background="Transparent" Name="TxtBoxAddress" Width="200" Text="" KeyUp="TxtBoxAddress_KeyUp"></TextBox>

<Button Content="Suchen" Name="btnSearch" Click="btnSearch_Click" Width="100"></Button>

C# でこの無限ループを処理するにはどうすればよいですか?

4

2 に答える 2

2

笑。それは面白い無限ループです。たくさんの答えがあります。

グローバル文字列 _lastValueSearched を追加してみてください。

private string _lastValueSearched;

private void TxtBoxAddress_KeyUp(object sender, KeyEventArgs e)
  {
    if (e.Key == Key.Enter && _lastValueSearched != TxtBoxAddress.Text)
      {
        //TxtBoxAddress.LoseFocus();
        btnSearch_Click(sender, e);
        _lastValueSearched = TxtBoxAddress.Text;
      }
  }


private void queryTask_Failed(object sender, TaskFailedEventArgs e)
 {
    //throw new NotImplementedException();
    MessageBox.Show("*", "*", MessageBoxButton.OK);
    isMapNearZoomed = false;
 }

したがって、最初に TxtBoxAddress の内部に入力すると、lastSearchValue が新しい検索値になります。メッセージ ボックスで Enter キーを押したときに、TxtBoxAddress テキストが変更されていなければ、if ステートメントはトリガーされません。

または、コメントアウトされた行 TxtBoxAddres.LoseFocus() が単独で機能する場合があります。これにより、TextBox からフォーカスが外れるはずなので、ユーザーがメッセージ ボックスで Enter キーを押しても、TextBox の KeyDown は発生しません。

于 2014-09-05T12:52:21.873 に答える
0

KeyPressの代わりにイベントを使用KeyUp:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13) // handle 'Enter' key
        MessageBox.Show("test");
}
于 2014-09-05T12:56:42.547 に答える