![](/img/trans.png)
[英]Why is WPF TextBox.KeyDown event not firing when a specific key to catch is set?
[英]Issue with firing event KeyDown on TextBox when it's 'jumping' to a TextBox WPF Grid
我有一个网格,彼此之间包含几个文本框:
通过按Enter键,我需要从txt1跳到txt2,从txt2跳到txt3,依此类推,我这样解决了它:
private void Grid_PreviewKeyDown_1(object sender, KeyEventArgs e)
{
try
{
if (e.Key == Key.Enter)
{
UIElement element = e.Source as UIElement;
element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
//e.Handled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我的问题在这里,在每个txt框上,按Enter键,我应该从另一个txtBoxes计算内容,当我在txt1上按Enter键时,它将跳转到txt2并立即调用txt2_KeyDown
事件,我想避免这一点。当我“站在” txt2上并按Enter时,调用txt2_KeyDown
事件。
即:
private void txt2_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
try
{
CalculateSomethingFromOtherTextBoxes();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
当我“站立”在txt1上并且想通过按Enter跳到txt2时,会触发以上内容,我怎么能在不调用txt2 KeyDown事件的情况下“跳转”,如果我在真正站立时没有按Enter在“ txt2”上。
谢谢大家,干杯
问题是由于您附加到文本框的KeyDown
事件。
而是,删除此事件并添加PreviewKeyDown
事件。
因此,您的方法签名应如下所示:
private void txt2_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
try
{
CalculateSomethingFromOtherTextBoxes();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
我测试了它,并且按预期工作。
我的问题在这里,在每个txt框上,按Enter键,我应该从另一个txtBoxes计算内容,当我在txt1上按Enter键时,它将跳转到txt2并立即调用txt2_KeyDown事件,我想避免。当我“站在” txt2上并按Enter时,调用txt2_KeyDown事件。
然后,您可以处理“ txt2”的LostKeyboardFocus
事件,而不是处理KeyDown
事件:
private Key key;
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
key = e.Key;
if (key == Key.Enter)
{
UIElement element = e.OriginalSource as UIElement;
element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
private void txt2_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (key == Key.Enter)
{
CalculateSomethingFromOtherTextBoxes();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.