我的问题是:
用户可以搜索地址。如果找不到任何内容,则用户会看到一个消息框。他可以按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#中处理这个无限循环?
答案 0 :(得分: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不应该触发。
答案 1 :(得分:0)
使用KeyPress
事件代替KeyUp
:
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13) // handle 'Enter' key
MessageBox.Show("test");
}