[英]Cannot set focus on TextBox in WPF
我不能将重点放在TextBox
,我有以下代码:
private void txbUid_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Tab) return; // here control doesn't loose focus
string stringUid = txbUid.Text;
long uid;
if (!TryParseUid(stringUid, out uid))
{
//string errMsg = $"Niepoprawny kod UID: {stringUid}";
//lblError.Text = errMsg;
//this.LogError(errMsg);
//txbUid.Text = "";
//txbUid.Focus();
return; // here control looses focus
}
}
如您所见,我尝试注释掉特定行,以查看其中是否引起了问题。 但是没有任何效果。
这一切都是由于按下Tab键引起的。
如果没有按下,则控制权应集中在应有的位置上,这会产生误导。
当我按下tab键时,默认情况下, 下一个控件获得了焦点,即我处理了该事件,但是它进一步传递给了包含控件的控件,该控件将焦点设置在其他控件上。 因此出现了意外行为。
解决方案是将e.Handled
设置为e.Handled
,而不是使用Focus()
方法(此后对事件的进一步处理将焦点设置为其他控件)设置为true
,因此不再进一步处理tab事件。
示例代码:
private void txbUid_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Tab) return; // here control doesn't loose focus
string stringUid = txbUid.Text;
long uid;
if (!TryParseUid(stringUid, out uid))
{
// no need to comment out anything
string errMsg = $"Niepoprawny kod UID: {stringUid}";
lblError.Text = errMsg;
this.LogError(errMsg);
txbUid.Text = "";
// mark event as handled
e.Handled = true;
return;
}
}
Tab
字符将由TextBox
在内部处理。 您可以尝试在返回之前设置e.Handled = true
。 如果这不起作用,则需要改为处理PreviewKeyDown (并且不要忘记设置Handled
属性)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.