TabControlでページを移動させたくない時があると思います。
そんな時の制御方法として以下のような方法があるかと思います。
以下のサンプルコードでは、フォーム上にTabControlが一つあり、適当なページにButtonを2つずつ置き、2つのうち一つを登録とし、もう片方を解除としてます。
C#
//登録したインデックスを保存
private int selectedIndex = -1;
//登録ボタンを押すとtrueに、解除ボタンを押すとfalseにするためのフラグです。
private bool _registered = false;
public Form1()
{
InitializeComponent();
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
//フラグがtrueであり、保存したインデックス番号と現在のインデックス番号が違う場合
if (this._registered && this.tabControl1.SelectedIndex != this.selectedIndex)
{
//保存したインデックス番号に設定しなおす
this.tabControl1.SelectedIndex = this.selectedIndex;
}
}
private void button1_Click(object sender, EventArgs e)
{
//Button1は登録ボタン
//インデックス番号を保存し、フラグをtrueにする
this._registered = true;
this.selectedIndex = this.tabControl1.SelectedIndex;
}
private void button2_Click(object sender, EventArgs e)
{
//Button2は解除ボタン
//インデックス番号をクリアし、フラグをfalseにする
this._registered = false;
this.selectedIndex = -1;
}
private void button3_Click(object sender, EventArgs e)
{
//Button3は登録ボタン
//インデックス番号を保存し、フラグをtrueにする
this._registered = true;
this.selectedIndex = this.tabControl1.SelectedIndex;
}
private void button4_Click(object sender, EventArgs e)
{
//Button4は解除ボタン
//インデックス番号をクリアし、フラグをfalseにする
this._registered = false;
this.selectedIndex = -1;
}
VB.NET
'登録したインデックスを保存
Private selectedIndex As Integer = -1
'登録ボタンを押すとtrueに、解除ボタンを押すとfalseにするためのフラグです。
Private _registered As Boolean = False
Private Sub TabControl1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
'フラグがtrueであり、保存したインデックス番号と現在のインデックス番号が違う場合
If Me._registered And Not Me.TabControl1.SelectedIndex = Me.selectedIndex Then
'保存したインデックス番号に設定しなおす
Me.TabControl1.SelectedIndex = Me.selectedIndex
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Button1は登録ボタン
'インデックス番号を保存し、フラグをtrueにする
Me._registered = True
Me.selectedIndex = Me.TabControl1.SelectedIndex
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Button2は解除ボタン
'インデックス番号をクリアし、フラグをfalseにする
Me._registered = False
Me.selectedIndex = -1
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Button3は登録ボタン
'インデックス番号を保存し、フラグをtrueにする
Me._registered = True
Me.selectedIndex = Me.TabControl1.SelectedIndex
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'Button4は解除ボタン
'インデックス番号をクリアし、フラグをfalseにする
Me._registered = False
Me.selectedIndex = -1
End Sub
