我有一个这样的菜单:
我希望如果光标位于ValorInsTextBox(Valor文本框)上并按Enter键,应用程序将调用按钮InserirBtn_ClickAsync(Inserir Button),并在此过程之后,光标将返回PosicaoInsTextBox(PosiçãoTextbox)。 我使用Key_Down制作了一些方法,但发生了一些奇怪的事情。看代码:
private void PosicaoInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
InserirBtn_ClickAsync(sender, e);
PosicaoInsTxtBox.Focus(FocusState.Programmatic);
}
}
private void ValorInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
InserirBtn_ClickAsync(sender, e);
if (PosicaoInsTxtBox.IsEnabled)
{
PosicaoInsTxtBox.Focus(FocusState.Programmatic);
}
else
{
ValorInsTxtBox.Focus(FocusState.Programmatic);
}
}
}
当我调试代码时,当ValorInsTextBox处于焦点时按Enter键,方法ValorInsTextBox_KeyDown启动,一切顺利。当它到达网上时:
PosicaoInsTxtBox.Focus(FocusState.Programmatic);
它执行方法PosicaoTextBox_KeyDown并开始执行它。我不知道为什么!有人可以帮帮我吗?
答案 0 :(得分:1)
您可以在ValorInsTxtBox_KeyDown事件处理程序中将KeyRoutedEventArgs的Handled属性设置为true,以防止调用PosicaoInsTxtBox_KeyDown事件处理程序:
private void ValorInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
InserirBtn_ClickAsync(sender, e);
if (PosicaoInsTxtBox.IsEnabled)
{
PosicaoInsTxtBox.Focus(FocusState.Programmatic);
}
else
{
ValorInsTxtBox.Focus(FocusState.Programmatic);
}
}
e.Handled = true;
}
在PosicaoInsTxtBox_KeyDown事件处理程序中执行相同的操作,以防止在Posicao“TextBox中按Enter键时再次调用它:
private void PosicaoInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
InserirBtn_ClickAsync(sender, e);
PosicaoInsTxtBox.Focus(FocusState.Programmatic);
}
e.Handled = true;
}