DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

TabControlのタブを選択できないようにする

タブコントロール内のTabPageのEnabledプロパティをFalseにしてもそのタブは選択できてしまいます。ここでは、指定したタブが選択できないようにする方法を紹介します。

.NET Framework 2.0以降で、Selectingイベントを使う方法

.NET Framework 2.0以降では、Selectingイベントを使って指定されたタブが選択される前にキャンセルすることができます。

以下の例では、2番目のTabPageを選択できないようにしています。

VB.NET
コードを隠すコードを選択
'TabControl1のSelectingイベントハンドラ
Private Sub TabControl1_Selecting(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.TabControlCancelEventArgs) _
    Handles TabControl1.Selecting
    '2番目のタブを選択できないようにする
    If e.TabPageIndex = 1 Then
        e.Cancel = True
    End If
End Sub
C#
コードを隠すコードを選択
//TabControl1のSelectingイベントハンドラ
private void TabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    //2番目のタブを選択できないようにする
    if (e.TabPageIndex == 1)
    {
        e.Cancel = true;
    }
}

選択された時に別のタブを表示する方法

.NET Framework 1.1以前で最も簡単なのは、TabControlのSelectedIndexChangedイベントで選択したくないタブが選択された時に、別のタブを選択するという方法です。

例えば次のようにすれば2番目のTabPageは選択できなくなります。

VB.NET
コードを隠すコードを選択
Private _tabIndex As Integer = -1

'選択されたタブが変更された時
Private Sub TabControl1_SelectedIndexChanged( _
    ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles TabControl1.SelectedIndexChanged
    '2番目のタブを選択できないようにする
    If TabControl1.SelectedIndex = 1 Then
        TabControl1.SelectedIndex = _tabIndex
    Else
        _tabIndex = TabControl1.SelectedIndex
    End If
End Sub
C#
コードを隠すコードを選択
private int _tabIndex = -1;

//選択されたタブが変更された時
private void TabControl1_SelectedIndexChanged(
    object sender, EventArgs e)
{
    //2番目のタブを選択できないようにする
    if (TabControl1.SelectedIndex == 1)
        TabControl1.SelectedIndex = _tabIndex;
    else
        _tabIndex = TabControl1.SelectedIndex;

}

それ以外の方法

SelectedIndexChangedイベントを使用した方法では選択させたくないタブが一瞬表示されるかもしれません。これが嫌だという場合は、さらに面倒な方法を使わなければなりません。この方法については、掲示板の「タブコントロールのタブの選択について」や、ニュースグループ「microsoft.public.dotnet.framework.windowsforms - Subject:Re: Disabling A Tab Page on A TAb Control」を参考にしてください。

  • 履歴:
  • 2008/09/09 「.NET Framework 2.0以降で、Selectingイベントを使う方法」を追加。(コメントでご指摘いただきました。)

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。