- 題名: 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]