1

無効な日付 (現在または過去の日付である必要があります) が入力された後、e.Cancel = true がありますが、Exit ボタンの close イベントは発生しません。e.Canel = true ステートメントを取り出したところ、すべて正常に動作しているように見えますが、これが将来別の問題を引き起こすのではないかと懸念しています。これをコーディングする正しい方法は何ですか?

private void maskedTextBoxDate_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
    {
        if (!e.IsValidInput)
        {
            toolTip1.ToolTipTitle = "Invalid Date";
            toolTip1.Show("The data you supplied must be a valid date in the format mm/dd/yyyy.", maskedTextBoxDate, 40, 25, 2000);
        }
        else
        {
            //Now that the type has passed basic type validation, enforce more specific type rules.
            DateTime userDate = (DateTime)e.ReturnValue;
            if (userDate > DateTime.Today)
            {
                toolTip1.ToolTipTitle = "Invalid Date";         
                toolTip1.Show("The date can't be greater than today's date.", maskedTextBoxDate, 40, 25, 2000);
                //Cancel property: true if the event should be canceled; otherwise false
                e.Cancel = true;

            }
        }

    }

終了ボタンのクローズ イベント:

private void cmdExit_Click(object sender, EventArgs e)
    {
        this.Close();
    }
4

3 に答える 3

1

この方法で型検証イベントをキャンセルすると、MaskedTextBox がフォーカスを失うことはありません。有効でないデータをテキスト ボックスにコミットすることはできないため、続行する前に有効なデータを入力するようにユーザーに強制するという考え方です。テキスト ボックス内の検証されていないデータをどのように処理するかを決定する必要があります。

これを回避する 1 つの方法は、MaskedTextBox の CausesValidation プロパティを false に設定することです。これにより、コントロールがフォーカスを失ったときに検証シーケンスが起動されなくなります。その場合、ボタン (「保存」など) などの別の方法で検証をトリガーする必要があります。これは、探しているユーザー エクスペリエンスによっては実行できない場合があります。

于 2013-01-24T17:12:32.020 に答える
0

というControl物件がありますCausesValidation。これは、フォーカスが与えられたときに、以前にフォーカスされていたコントロールを検証するコントロールを示します。

設定maskedTextBoxDate.CausesValidation = true

すべての親コントロール、つまりフォームと、それと の間のすべてのコンテナに対してmaskedTextBoxDate、セットCausesValidation = false

これにより、コントロールを検証せずにフォームを閉じたり操作したりできます。

于 2013-01-24T21:43:22.723 に答える
0

Date コントロールの OnExit ではなく、フォームの Close イベントで日付を確認し、e.cancel を true または false に設定します。とにかく、ユーザーがコントロールから逃れる方法を持っていないとき、それはユーザーにとって非常に苛立たしいものです。多くの場合、彼はフォーマットを知らず、単にエスケープしたいからです :-)

ステファン・ハリミ

于 2013-01-24T17:22:28.603 に答える