1

新しいWinFormに検証を追加しているところです。エラープロバイダーコントロールと組み合わせて、検証イベントと検証済みイベントを使用しています。以下のコードを参照してください。

最初の検証に問題はありません(つまり、ユーザーが12文字を超えて入力した場合)。検証イベントでエラーが設定され、ユーザーが12文字以下を入力するまでエラーが続きます。次に、検証されたイベントが入力され、エラーが空の文字列にリセットされます。

ただし、同じテキストボックスでの2回目の検証には問題があります。コードはテキストボックスで長さがゼロかどうかをチェックし、プロバイダーにエラーを設定します。デバッガーで監視すると、このコードが実際に呼び出され、エラーが正常に設定されます。次に、何か奇妙なことが起こり、検証されたイベントが(予期せずに)発生し、そこにあるコードがエラーを即座にリセットします。

すでにエラーセットがあるのに、検証されたイベントが発生するのはなぜですか?これは.NETのバグのようです。誰かがこれを行う別の方法を提案したり、私が間違っていることを言うことができますか?

ありがとう、

バザ

Private Sub SampleCodeTextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles SampleCodeTextBox.Validating
    If SampleCodeTextBox.Text.Length > 12 Then
        e.Cancel = True
        FormErrorProvider.SetError(SampleCodeTextBox, "Max of 12 characters for sample code")
    End If

    If SampleCodeTextBox.Text.Trim.Length = 0 Then
        FormErrorProvider.SetError(SampleCodeTextBox, "Must enter a sample code")
    End If
End Sub

Private Sub SampleCodeTextBox_Validated(sender As Object, e As System.EventArgs) Handles SampleCodeTextBox.Validated
    FormErrorProvider.SetError(SampleCodeTextBox, "")
End Sub
4

2 に答える 2

2

Validatingイベントハンドラーで長さゼロのテキストチェックが失敗した場合にCancelEventArgs.Cancelプロパティを設定する必要があります。True

Control.Validatedイベントに関するMSDNの記事から:

ValidatingイベントデリゲートでCancelEventArgsのCancelプロパティがtrueに設定されている場合、Validatingイベントの後に通常発生するすべてのイベントが抑制されます。

于 2012-06-21T03:34:27.923 に答える
2

e.Cancel = True次のifブロックで見逃していませんか?

于 2012-06-21T03:35:11.340 に答える