7

キャンセルボタンをクリックしてwinformを閉じるときに、errorproviderの検証をエレガントに無効にする方法はありますか? テキストボックスがフォーカスを失ったときに常に検証が行われ、ユーザーがキャンセルボタンをクリックしたときに検証したくありません。ユーザーがキャンセルをクリックしたときに検証するのは少しばかげています。

4

2 に答える 2

15

グーグルで調べた後、答えが見つかりました。キャンセルボタンのCauseValidationプロパティをfalseに設定するだけです。それでおしまい。

于 2010-01-03T15:20:29.187 に答える
6

私は自分でこれに遭遇したCauseValidation = falseだけで、設定は部分的な解決策にすぎません。

をキャンセル ボタンに設定するForm.CancelButtonと、Escape キーがそのボタンを呼び出すことになっています。ただし、 を設定しても、Escape キーに応答して検証が実行されCauseValidation = falseます。

これを修正するには、次のハックを追加します。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // Although we set CausesValidation = false for the Cancel button,
    //  the Escape key fails to cancel due to validation failure. The
    //  Form.CancelButton property should invoke the validation-free
    //  cancel button, but doesn't. Force the issue here.
    if (keyData == Keys.Escape)
    {
        DialogResult = DialogResult.Cancel;
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
于 2011-04-25T16:01:55.203 に答える