2

私は 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 イベントがトリガーされる理由がわかりません。

4

3 に答える 3

5

モーダルMessageBoxを開くと、フォーカスが失われます。Validatingイベントにフックしてみてください。

于 2011-02-22T00:38:11.370 に答える
0

Xaqron が提供するリンクで前に述べたように、LostFocus イベントで Focus メソッドを使用することは禁止されていると言われています。
また、WPF アプリケーションを開発しているため、Validating イベントと CausesValidation プロパティがないため、コンテンツを検証する他の方法は、TextChanged イベントを使用するか、バインディング検証を使用することです。

回答ありがとうございます。

于 2011-02-22T23:26:53.263 に答える