在验证失败时将Focus保持回原来的文本框

时间:2014-03-14 11:39:56

标签: c# wpf winforms c#-3.0

如果验证失败,我希望Focus回到之前的Textbox。我正在验证lostFocus事件的Textbox控件值。需要一些帮助。

这个问题很有意思,链接是

Keep Focus on Textbox after user tried to move to other control (on failed validation) in winforms, .net 3.5 WEC7

1 个答案:

答案 0 :(得分:1)

如果你试图将一个元素集中在它自己的LostFocus处理程序中,你将面临一个StackOverflowException,我不确定根本原因(我怀疑焦点类似于反弹)但是那里是一个简单的解决方法:发送它。

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    var element = (sender as TextBox);
    if (!theTextBoxWasValidated())
    {
        // doing this would cause a StackOverflowException
        // element.Focus();

        var restoreFocus = (System.Threading.ThreadStart)delegate { element.Focus(); };
        Dispatcher.BeginInvoke(restoreFocus);
    }
}

通过Dispatcher.BeginInvoke,您确保恢复焦点不会妨碍正在进行的焦点丢失(并避免您面临的令人讨厌的异常)