Question

I want Focus back to the previous Textbox if validation gets failed. I am validating the Textbox control value on lostFocus event. Need some help.

This question was eralier too link is

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

Was it helpful?

Solution

If you attempt to focus an element inside its own LostFocus handler you will face a StackOverflowException, I'm not sure about the root cause (I suspect the focus kind of bounces around) but there is an easy workaround: dispatch it.

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);
    }
}

Through Dispatcher.BeginInvoke you make sure that restoring the focus doesn't get in the way of the in-progress loss of focus (and avoid the nasty exception you'd face otherwise)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top