タブコントロール内のTabPageのEnabledプロパティをFalseにしてもそのタブは選択できてしまいます。ここでは、指定したタブが選択できないようにする方法を紹介します。
.NET Framework 2.0以降では、Selectingイベントを使って指定されたタブが選択される前にキャンセルすることができます。
以下の例では、2番目のTabPageを選択できないようにしています。
'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
//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は選択できなくなります。
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
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」を参考にしてください。
(この記事は、「.NETプログラミング研究 第50号」で紹介したものを基にしています。)