2008/05/04(Sun) 03:47:24 編集(投稿者)
2008/05/04(Sun) 03:46:54 編集(投稿者)
2008/05/04(Sun) 03:40:43 編集(投稿者)
<pre><pre>■No17924 (渋木宏明(ひどり) さん) に返信
> ・必要なだけチェックボックスを並べて、ボタンに見えるようにスタイルを設定
ラジオボタンですよ、たぶん。
やってみたけど、全部押下状態になってしまったもん。
VBですけど、何かの参考にはなるか??ならんかも。
フローレイアウトパネルだと、5タブ表示に必要な最低幅は340ドットでした。
全部デフォルトで。ボタンの間は適当な間隔が空きます。
テキストBOXのとこが、タブコンテンツ用のパネルに挿げ替わるだけですね。
Public Class Form1
Public Class MyTabCtrl : Inherits Panel
Private flp As New FlowLayoutPanel
Private txt As New TextBox
Public Sub New()
Me.Size = New Size(300, 300)
Me.Dock = DockStyle.Fill
'flp.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
flp.Height = 26
flp.AutoScroll = False
flp.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowOnly
flp.Dock = DockStyle.Top
txt.Dock = DockStyle.Fill
txt.Multiline = True
txt.BorderStyle = Windows.Forms.BorderStyle.None
Me.Controls.Add(txt)
Me.Controls.Add(flp)
For i As Integer = 0 To 5 - 1
Dim cb As New RadioButton
cb.Appearance = Appearance.Button
cb.FlatStyle = FlatStyle.Flat
cb.Text = String.Format("タブ[{0}]", i + 1)
cb.Width = 60
AddHandler cb.Click, AddressOf Tab_Changed
cb.Tag = String.Format("タブ{0} 選択", i + 1)
flp.Controls.Add(cb)
Next
With CType(flp.Controls(0), RadioButton)
.PerformClick()
End With
End Sub
Private Sub Tab_Changed(ByVal s As Object, ByVal e As EventArgs)
Dim cb As RadioButton = CType(s, RadioButton)
txt.Text = cb.Tag
For i As Integer = 0 To 5 - 1
Dim rb As RadioButton = CType(flp.Controls(i), RadioButton)
If cb.Equals(rb) Then
cb.Width = 100
Else
rb.Width = 50
End If
Next
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(340, 360)
Me.Controls.Add(New MyTabCtrl())
End Sub
End Class
訂正:タブっぽく見えるようにしました。
フローレイアウトパネルの高さを調整することでボタンとコンテンツが繋がっているように
見えるようにしました。
ボタンルックが希望だから関係ないか。
</pre></pre>