- 題名: TabControlのタブを非表示にしたい
- 日時: 2003/09/08 19:31:31
- ID: 607
- この記事の返信元: - (なし)
 
- この記事への返信: - [608] Re[1]: TabControlのタブを非表示にしたい2003/09/08 21:05:52
 
- ツリーを表示
毎度ありがとうございます。どらごらです。
> Remove以外には手はないと思います。
> 非表示したいTabPageへの参照をTabPageコレクション以外に
> 別の変数にも保持しておけば、RemoveしてもそのTabPageがなくなりませんし。
> 表示するときはその別の変数のTabPageをAddしなおせばOKです。
以下できました。ありがとうございました。
    'タブページ
    Private FTabIndex As Integer
    Private FTabPages() As TabPage
...
        Try
            ReDim FTabPages(TabControl.TabPages.Count - 1)
            For I = TabControl.TabPages.Count - 1 To 0 Step -1
                FTabPages(I) = TabControl.TabPages(I)
                TabControl.TabPages.RemoveAt(I)
            Next
        Catch
        End Try
        FTabIndex = 0
        TabControl.TabPages.Add(FTabPages(FTabIndex))
...
    Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
        If FTabIndex < UBound(FTabPages) Then
            FTabPages(FTabIndex) = TabControl.TabPages(0)
            TabControl.TabPages.RemoveAt(0)
            FTabIndex += 1
            TabControl.TabPages.Add(FTabPages(FTabIndex))
        End If
    End Sub
    Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
        If FTabIndex > 0 Then
            FTabPages(FTabIndex) = TabControl.TabPages(0)
            TabControl.TabPages.RemoveAt(0)
            FTabIndex -= 1
            TabControl.TabPages.Add(FTabPages(FTabIndex))
        End If
    End Sub
-----
 ふとここに貼り付けて思ったのですが、これってインスタンスを
 変数に格納しているから、自分で解放しないとまずいですよね^^;
> フォームのPrivate変数ならこのフォームのインスタンスが解放されるときにTabPageの配列も解放されます。
> フォームが生きている間にTabPageがまったくいらなくなるというのはたぶんないですよね?
 無いですね。自動的に解放されるんだ。。。
 ここらへんはDelphiとは違うんですね。C#でもそうなんですか?
 それとも、Javaのガーベジコレクションに近いのかな?
 以前メモリーリーク起こしていたのが、こんな感じで起こしていたのを
 発見したので。
 現状ではFormのDisposed時にNothingではないですが、解放しています。
 詳しくメモリーの状況を調べてないですが、特に問題がなさそうなので
 必須とはいわないが、あったほうが精神衛生上楽(?)な気持ちでこのままにします。
 やっぱりGUIで作成したのは別として、自分でインスタンスを生成または保持して
 いるのは、自分で解放ってのが無難かなとも思います。
    Private Sub FrmUserEdit_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Disposed
        Dim I As Integer
        For I = 0 To UBound(FTabPages)
            FTabPages(I).Dispose()
        Next
    End Sub
どらごらです。 タブコントロールの現在アクティブではないタブを表示にしたいのですが、 SelectedTab.Visible = False ↑では消えてくれません。 googleで検索したところオーナードローでタブの部分をグラデーション表示にしている サンプルはありましたが、オーナードローするほどの機能ってわけでも 無いと思い、質問致しました。 なお非表示にした部分は、後で表示するのでRemoveするわけにはいきません。 現在以下のコードで試しています。 Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click If TabControl.TabIndex < TabControl.Controls.Count - 1 Then TabControl.SelectedTab.Visible = False TabControl.SelectedIndex += 1 TabControl.TabIndex += 1 TabControl.SelectedTab.Visible = True End If End Sub Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click If TabControl.TabIndex > 0 Then TabControl.SelectedTab.Visible = False TabControl.SelectedIndex -= 1 TabControl.TabIndex -= 1 TabControl.SelectedTab.Visible = True End If End Sub よろしくお願いします。 [VS.NET 2003][WinXP][VB.NET]