お世話になっております。
.NET Framework 2.0 (VS2013 の C#) で、ウィザード風のフォームアプリケーションを作成しています。
1つのフォームに、タブコントロール(ページがいくつか)、戻るボタン、次へボタン、キャンセルボタン、エラープロバイダを配置しています。
タブコントロールのページにはテキストボックスをいくつか配置しています。戻るボタン、次へボタン、キャンセルボタンをクリックしたときだけ、タブ選択を動かせるように、Selectingイベントを加工しています(移動はかならずボタンを経由させ、タブをクリックしても選択されないようにしてあります)。
------------------------------------------------------------------------------------------------------
仕様として、各ページのテキストボックスは、入力が必須です。入力されていない項目があるときは、次のページに進めないようにします。
ただし、戻るボタンで前のページへ戻ったり、キャンセルボタンで終了のは表示中のページのテキストボックスに未入力があっても可能にします。
------------------------------------------------------------------------------------------------------
キャンセルボタンは、フォームのCancelButtonプロパティに登録してあります。
各ボタンのCauseValidationは、戻るボタンとキャンセルボタンはFalse、次へボタンはTrueを設定しています。
各ページのValidatingイベントを捕捉して、テキストボックスで空のものがある場合にはエラープロバイダにメッセージを登録し、e.Cancel = Trueをセットして画面遷移しないようにしています。
戻るボタンは、TabControlのSelectedIndexを-1,次へボタンは+1、キャンセルボタンは、メッセージボックスで(閉じて良いか)確認後、Application.Exit()で終了させるか、なにもせずに戻ります。
上記の設定ですと、キャンセルボタンと次へボタンは仕様どおり動きますが、戻るボタンでは(CauseValidationをFalseにしているにもかかわらず)常に検証が走ってしまいます。
戻るボタンで表示されるページのCauseValidationがTrueになっているために検証が働くものと考えて、すぺてのタブページのCauseValidationをFalseにしてみると、今度は次へボタンの(CauseValidationがTrueになっているにもかかわらず)検証機能が働かなくなります。
また、タブコントロール(ページ)上の検証が走るきっかけとなるコントロールはタブコントロール上にあるもの(=タブページ)だけが対象かと思い、試しにキャンセルボタンのCauseValidationをTrueにすると、タブコントロール(ページ)上にないボタンにもかかわらず検証機能はしっかり働きます。
CauseValidationプロパティの説明では、フォーカスをうけたときに検証処理を動かすか否か(そのコントロールがきっかけになる)を指定すると書かれていますが、MSDNライブラリの説明はこれらの挙動と食い違うように思います。
タブコントロールを使用すると、検証機能のスコープ(対象コントロールの範囲)がちぐはぐになってしまうのでしょうか?タブコントロールを使ってうまく検証機能を動かせたことがある方、何か注意点などありましたらご教示下さると幸いです。
宜しくお願い致します。