为什么我的LostFocus事件会出现无限循环

时间:2011-02-22 00:32:51

标签: c# events textbox infinite-loop lostfocus

我是C#的初学者,我正在开发一个基本的应用程序 我想检查文本框的值是否是带有以下代码的数字:

private void check_value(object sender)
    {
        TextBox tb = (TextBox)sender ;
        if (!Utility.isNumeric(tb.Text)){
            MessageBox.Show(tb.Text.Length.ToString());
            tb.Focus();
        }
    }

    private void Amount_1_LostFocus(object sender, RoutedEventArgs e)
    {
        check_value(sender);
    }

当我在文本框中输入一个字母时,有一个无限循环,似乎tb.Focus()实际上导致LostFocus事件被递归调用。 我不明白为什么调用对象的Focus方法会触发同一对象的LostFocus事件。

2 个答案:

答案 0 :(得分:5)

打开模态MessageBox是失去焦点的原因。尝试挂钩Validating事件。

答案 1 :(得分:0)

正如我之前在Xaqron提供的链接中所说,它被禁止在LostFocus事件中使用Focus方法。
当我正在开发WPF应用程序时,没有Validating事件和CausesValidation属性,因此验证内容的其他方法是使用TextChanged事件或使用绑定验证。

感谢您的回答。