ToolStrip 何とかってこの一連の勉強で一杯触りましたよね。
てか、もうおなかいっぱい。。。
しかし、ちゃんとドキュメントをしらみつぶしに読んでくと
結構いろいろあって、しばらくぶりの更新なのに疲れてしまいました。
なので、今回もテキトーなプログラムを書いてみました。
■参考文献
ToolStrip クラス
ToolStrip コントロール (Windows フォーム)
ToolStrip コントロールのアーキテクチャ
■実行画像
ToolStrip だけデザイナ上で配置してあります。
Public Class ToolStripTest
Private Sub ToolStripTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Button の配置
Dim btn As ToolStripButton = New ToolStripButton()
Me.ToolStrip1.Items.Add(btn)
With btn
.Text = "AllowItemReorder"
.CheckOnClick = True ' トグルボタンの外観にする
AddHandler .Click, AddressOf Button_Click
End With
' ComboBox の配置
Dim dockCmb As ToolStripComboBox = New ToolStripComboBox()
Me.ToolStrip1.Items.Add(dockCmb)
With dockCmb
' AutoComplete を有効にしてみる
.AutoCompleteMode = AutoCompleteMode.SuggestAppend
.AutoCompleteSource = AutoCompleteSource.ListItems
.Items.AddRange(New Object() { _
DockStyle.Bottom, _
DockStyle.Fill, _
DockStyle.Left, _
DockStyle.None, _
DockStyle.Right, _
DockStyle.Top})
.Overflow = ToolStripItemOverflow.Never
AddHandler .SelectedIndexChanged, AddressOf DockComboBox_SelectedIndexChanged
End With
' もいっこ ComboBox
Dim layoutStyleCmb As ToolStripComboBox = New ToolStripComboBox()
Me.ToolStrip1.Items.Add(layoutStyleCmb)
With layoutStyleCmb
.DropDownStyle = ComboBoxStyle.DropDownList
.Items.AddRange(New Object() { _
ToolStripLayoutStyle.Flow, _
ToolStripLayoutStyle.HorizontalStackWithOverflow, _
ToolStripLayoutStyle.StackWithOverflow, _
ToolStripLayoutStyle.Table, _
ToolStripLayoutStyle.VerticalStackWithOverflow})
AddHandler .SelectedIndexChanged, AddressOf LayoutStyleComboBox_SelectedIndexChanged
End With
' ToolStripSplitButton・ToolStripLabel の配置
Dim splitButton As ToolStripSplitButton = New ToolStripSplitButton()
Me.ToolStrip1.Items.Add(splitButton)
Dim rendermodeCustomLabel As ToolStripLabel = New ToolStripLabel()
With rendermodeCustomLabel
.Text = ToolStripRenderMode.Custom.ToString()
.Tag = ToolStripRenderMode.Custom
End With
Dim rendermodeManagerRenderModeLabel As ToolStripLabel = New ToolStripLabel()
With rendermodeManagerRenderModeLabel
.Text = ToolStripRenderMode.ManagerRenderMode.ToString()
.Tag = ToolStripRenderMode.ManagerRenderMode
End With
Dim rendermodeProfessionalLabel As ToolStripLabel = New ToolStripLabel()
With rendermodeProfessionalLabel
.Text = ToolStripRenderMode.Professional.ToString()
.Tag = ToolStripRenderMode.Professional
End With
Dim rendermodeSystemLabel As ToolStripLabel = New ToolStripLabel()
With rendermodeSystemLabel
.Text = ToolStripRenderMode.System.ToString()
.Tag = ToolStripRenderMode.System
End With
With splitButton
.Text = "RenderMode"
.DropDownItems.AddRange(New ToolStripLabel() { _
rendermodeCustomLabel, _
rendermodeManagerRenderModeLabel, _
rendermodeProfessionalLabel, _
rendermodeSystemLabel})
AddHandler .ButtonClick, AddressOf SplitButton_ButtonClick
AddHandler .DropDownItemClicked, AddressOf SplitButton_DropDownItemClicked
End With
' ToolStripSeparator の配置
Dim separator As ToolStripSeparator = New ToolStripSeparator()
Me.ToolStrip1.Items.Add(separator)
' ToolStripDropDownButton の配置
Dim dropDownButton As ToolStripDropDownButton = New ToolStripDropDownButton()
Me.ToolStrip1.Items.Add(dropDownButton)
With dropDownButton
.Text = "ToolStripDropDownButton"
.DropDownItems.AddRange(New ToolStripItem() { _
New ToolStripTextBox(), _
New ToolStripMenuItem("MenuItem"), _
New ToolStripStatusLabel("StatusLabel"), _
New ToolStripProgressBar()})
End With
With Me.ToolStrip1
.Dock = DockStyle.Left
' Margin を自分で設定する
.AutoSize = False
.Margin = New Padding(2, 0, 2, 0)
' Tab での移動を可能にする
.TabStop = True
.AllowMerge = True
End With
Me.Size = New Size(400, Me.Height)
End Sub
Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim btn As ToolStripButton = DirectCast(sender, ToolStripButton)
Me.ToolStrip1.AllowItemReorder = btn.Checked
End Sub
Private Sub DockComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim dockCmb As ToolStripComboBox = DirectCast(sender, ToolStripComboBox)
Me.ToolStrip1.Dock = DirectCast(dockCmb.SelectedItem, DockStyle)
End Sub
Private Sub LayoutStyleComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim layoutStyleCmb As ToolStripComboBox = DirectCast(sender, ToolStripComboBox)
Me.ToolStrip1.LayoutStyle = DirectCast(layoutStyleCmb.SelectedItem, ToolStripLayoutStyle)
End Sub
Private Sub SplitButton_ButtonClick(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("SplitButton がクリックされました")
End Sub
Private Sub SplitButton_DropDownItemClicked(ByVal sender As Object, ByVal e As ToolStripItemClickedEventArgs)
Dim clickedItem As ToolStripItem = e.ClickedItem
Dim rendermode As ToolStripRenderMode = DirectCast(clickedItem.Tag, ToolStripRenderMode)
If rendermode = ToolStripRenderMode.Custom Then
Me.ToolStrip1.Renderer = New MyCustomRenderer()
Else
Me.ToolStrip1.Renderer = Nothing
Me.ToolStrip1.RenderMode = rendermode
End If
End Sub
End Class
''' <summary>
''' カスタム描画クラス
''' </summary>
Public Class MyCustomRenderer
Inherits ToolStripRenderer
Protected Overrides Sub OnRenderToolStripBackground(ByVal e As System.Windows.Forms.ToolStripRenderEventArgs)
MyBase.OnRenderToolStripBackground(e)
Using brush As System.Drawing.Drawing2D.LinearGradientBrush _
= New System.Drawing.Drawing2D.LinearGradientBrush(e.ToolStrip.ClientRectangle, Color.White, Color.SkyBlue, 0.0F)
e.Graphics.FillRectangle(brush, e.AffectedBounds)
End Using
End Sub
End Class