TabControlでページを移動させたくない時があると思います。
そんな時の制御方法として以下のような方法があるかと思います。
以下のサンプルコードでは、フォーム上にTabControlが一つあり、適当なページにButtonを2つずつ置き、2つのうち一つを登録とし、もう片方を解除としてます。
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //登録したインデックスを保存 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | '登録したインデックスを保存 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 |