他のアプローチも機能する可能性がありますが、Validating イベントはこのために特別に設計されています。
仕組みは次のとおりです。タブ コントロールの SelectedIndex が変更されたら、新しく選択されたページにフォーカスを設定し、CausesValidation = true に設定します。これにより、ユーザーが何らかの方法でタブを離れようとした場合に Validating イベントが確実に呼び出されます。
次に、ページ固有の Validating イベントで通常の検証を行い、必要に応じてキャンセルします。
Form Shown イベント (Form_Load は機能しません) で最初に選択したタブ ページを設定し、タブ ページ固有の検証イベントを関連付ける必要があります。
次に例を示します。
private void Form_Shown(object sender, System.EventArgs e)
{
// Focus on the first tab page
tabControl1.TabPages[0].Focus();
tabControl1.TabPages[0].CausesValidation = true;
tabControl1.TabPages[0].Validating += new CancelEventHandler(Page1_Validating);
tabControl1.TabPages[1].Validating += new CancelEventHandler(Page2_Validating);
}
void Page1_Validating(object sender, CancelEventArgs e)
{
if (textBox1.Text == "")
{
e.Cancel = true;
}
}
void Page2_Validating(object sender, CancelEventArgs e)
{
if (checkBox1.Checked == false)
{
e.Cancel = true;
}
}
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
// Whenever the current tab page changes
tabControl1.TabPages[tabControl1.SelectedIndex].Focus();
tabControl1.TabPages[tabControl1.SelectedIndex].CausesValidation = true;
}