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