3

タブ コントロールと 3 つのタブページがあります。(C#)

タブ 2 にいて、テキスト ボックスの値を編集してからタブ 3 をクリックすると、テキスト ボックスに入力された内容を検証する必要があります。正しい場合は、タブ 3 に切り替えることを許可する必要があります。そうでない場合は、タブ 2 のままにする必要があります。どうすればこれを達成できますか?

現在、tabpage2 の「leave」イベントを処理しています。そこでテキスト ボックスの値を検証し、無効であることが判明した場合は、tabcontrol.Selectedtab = tabpage2; として設定します。これは検証を行いますが、新しいタブに切り替わります! どうすればナビゲーションを制限できますか。

私は C# の初心者なので、間違ったイベントを処理している可能性があります。

関連するコードは次のとおりです。

private void tabpage2_Leave(object sender, EventArgs e) 
{ 
    if (Validatetabpage2() == -1) 
    { 
        this.tabcontrol.SelectedTab =this.tabpage2; 
    } 
}
4

2 に答える 2

2

他のアプローチも機能する可能性がありますが、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; 
}
于 2010-01-21T14:40:19.427 に答える
1

TabControl Selecting イベントを使用して、ページの切り替えをキャンセルできます。イベントで e.Cancel を true に設定すると、タブコントロールが別のタブを選択できなくなります。

private bool _cancelLeaving = false;

private void tabpage2_Leave(object sender, EventArgs e)
{
    _cancelLeaving = Validatetabpage2() == -1;
}

private void tabcontrol_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = _cancelLeaving;
    _cancelLeaving = false;
}
于 2010-01-21T05:06:53.053 に答える