C#中是否有类似于从C中fflush()的内容

本文关键字:fflush 是否 类似于 | 更新日期: 2023-09-27 18:20:57

我的问题是:

用户可以搜索地址。如果没有找到任何内容,则用户会看到一个消息框。他可以按ENTER键关闭它。到目前为止,一切都很好。也可以通过按ENTER键来启动调用SearchAddresses()。现在,用户处于一个无休止的循环中,因为每次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#中处理这个无休止的循环?

C#中是否有类似于从C中fflush()的内容

Lol。这是一个有趣的内接循环。有很多答案。

尝试添加全局字符串_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将成为新的搜索值。当他们按下消息框上的回车键时,如果TxtBoxAddress文本没有更改,则不会触发if语句。

或者,这行注释掉了,TxtBoxAddres.LosseFocus()可以自己工作。这应该会将焦点从TextBox上移开,因此当用户在消息框上按下回车键时,TextBox KeyDown不应该触发。

使用KeyPress事件而不是KeyUp:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13) // handle 'Enter' key
        MessageBox.Show("test");
}