朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
.Net TabControlのIndexを変更させない





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








良いやや良い普通やや悪い悪い

投稿日時評価コメント