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





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








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

投稿日時評価コメント