C# 将焦点放回验证失败时的上一个文本框

C# 将焦点放回验证失败时的上一个文本框,c#,wpf,winforms,c#-3.0,C#,Wpf,Winforms,C# 3.0,如果验证失败,我希望焦点回到上一个文本框。我正在验证lostFocus事件上的Textbox控件值。我需要一些帮助 这个问题也很难回答 如果您试图将一个元素集中在它自己的LostFocus处理程序中,您将面临StackOverflowException,我不确定其根本原因(我怀疑焦点会反弹),但有一个简单的解决方法:分派它 private void TextBox_LostFocus(object sender, RoutedEventArgs e) { var element = (s

如果验证失败,我希望焦点回到上一个文本框。我正在验证lostFocus事件上的Textbox控件值。我需要一些帮助

这个问题也很难回答


如果您试图将一个元素集中在它自己的
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
您可以确保恢复焦点不会妨碍正在进行的焦点丢失(并避免否则将面临的严重异常)