验证失败时,将焦点保持在前一个文本框上

本文关键字:一个 文本 失败 焦点 验证 | 更新日期: 2023-09-27 17:50:25

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

这个问题以前也有过link is

在winforms, .net 3.5 WEC7

验证失败时,将焦点保持在前一个文本框上

中,当用户试图移动到其他控件(验证失败)时,将焦点保持在文本框上

如果您试图在其自己的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,您可以确保恢复焦点不会妨碍正在进行的焦点丢失(并避免您将面临的令人讨厌的异常)