Подскажите как на контроле ToolStrip сделать кнопку закрытия панели инструментов (в виде крестика)?
И еще, есть ли свойство, метод, чтобы таскать ToolStrip мышкой по форме за grip, или придется самому программировать?

Public Class MyToolStrip
Inherits ToolStrip
Private fieldheader As ToolStripHeader
Private fieldcontent As ToolStripContent
Public Sub New(ByVal label_text As String)
MyBase.New()
Me.SuspendLayout()
fieldheader = New ToolStripHeader(label_text)
fieldcontent = New ToolStripContent
Me.Dock = DockStyle.None
Me.Padding = New Padding(3)
Me.Renderer = New MyToolStripRenderer
Me.GripStyle = ToolStripGripStyle.Hidden
Me.LayoutStyle = ToolStripLayoutStyle.VerticalStackWithOverflow
Me.MinimumSize = fieldheader.PreferredSize
Me.Items.Add(New ToolStripControlHost(fieldheader))
Me.Items.Add(New ToolStripControlHost(fieldcontent))
Me.ResumeLayout()
End Sub
Public ReadOnly Property Header() As ToolStripHeader
Get
Return fieldheader
End Get
End Property
Public ReadOnly Property Content() As ToolStripContent
Get
Return fieldcontent
End Get
End Property
Protected Overrides Sub OnItemAdded(ByVal e As System.Windows.Forms.ToolStripItemEventArgs)
MyBase.OnItemAdded(e)
e.Item.Margin = New Padding(0)
End Sub
End Class
Public Class ToolStripHeader
Inherits ToolStrip
Public label As New ToolStripLabel()
Public closebutton As New ToolStripButton("x")
Private initlocation As Point
Public Sub New(ByVal label_text As String)
MyBase.New()
Me.SuspendLayout()
Me.Dock = DockStyle.None
Me.Renderer = New HeaderRenderer
Me.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow
Me.GripStyle = ToolStripGripStyle.Hidden
label.Font = New Font(FontFamily.GenericSansSerif, 8, FontStyle.Bold)
label.ForeColor = Color.White
label.Text = label_text
Me.Items.Add(label)
Me.Items.Add(closebutton)
label.Alignment = ToolStripItemAlignment.Left
closebutton.Alignment = ToolStripItemAlignment.Right
closebutton.AutoToolTip = False
AddHandler closebutton.Click, AddressOf closeButton_Click
Me.ResumeLayout()
End Sub
Protected Overrides Sub OnMouseDown(ByVal mea As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(mea)
If mea.Button = Windows.Forms.MouseButtons.Left Then
Me.Cursor = Cursors.SizeAll
Me.Capture = True
initlocation = mea.Location
End If
End Sub
Protected Overrides Sub OnMouseMove(ByVal mea As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseMove(mea)
If mea.Button = Windows.Forms.MouseButtons.Left Then
Me.Parent.Location += mea.Location - initlocation
End If
End Sub
Protected Overrides Sub OnMouseUp(ByVal mea As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(mea)
Me.Cursor = Cursors.Default
End Sub
Private Sub closeButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.Parent.Visible = False
End Sub
End Class
Public Class ToolStripContent
Inherits ToolStrip
Public Sub New()
MyBase.New()
Me.SuspendLayout()
Me.Renderer = New BaseRenderer
Me.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow
Me.GripStyle = ToolStripGripStyle.Hidden
Me.Padding = New Padding(0)
Me.ResumeLayout()
End Sub
Protected Overrides Sub OnItemAdded(ByVal e As System.Windows.Forms.ToolStripItemEventArgs)
MyBase.OnItemAdded(e)
If Not TypeOf e.Item Is ToolStripButton Then Exit Sub
CType(e.Item, ToolStripButton).CheckOnClick = True
End Sub
Protected Overrides Sub OnItemClicked(ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
MyBase.OnItemClicked(e)
For Each obj As ToolStripItem In Me.Items
If Not TypeOf e.ClickedItem Is ToolStripButton Then Continue For
CType(obj, ToolStripButton).Checked = False
Next
End Sub
End Class
Public Class BaseRenderer
Inherits ToolStripRenderer
Protected Overrides Sub OnRenderButtonBackGround(ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs)
MyBase.OnRenderItemBackground(e)
If e.Item.Selected And CType(e.Item, ToolStripButton).Checked Then
e.Graphics.FillRectangle(Brushes.SteelBlue, e.Item.ContentRectangle)
e.Graphics.DrawRectangle(Pens.Blue, e.Item.ContentRectangle)
ElseIf e.Item.Selected Or CType(e.Item, ToolStripButton).Checked Then
e.Graphics.FillRectangle(Brushes.LightBlue, e.Item.ContentRectangle)
e.Graphics.DrawRectangle(Pens.Blue, e.Item.ContentRectangle)
End If
End Sub
Protected Overrides Sub OnRenderToolStripBackground(ByVal e As System.Windows.Forms.ToolStripRenderEventArgs)
MyBase.OnRenderToolStripBackground(e)
e.Graphics.FillRectangle(New SolidBrush(SystemColors.Control), e.AffectedBounds)
End Sub
End Class
Public Class HeaderRenderer
Inherits BaseRenderer
Protected Overrides Sub OnRenderToolStripBackground(ByVal e As System.Windows.Forms.ToolStripRenderEventArgs)
MyBase.OnRenderToolStripBackground(e)
e.Graphics.FillRectangle(Brushes.Gray, e.AffectedBounds)
End Sub
End Class
Public Class MyToolStripRenderer
Inherits BaseRenderer
Protected Overrides Sub OnRenderToolStripBorder(ByVal e As System.Windows.Forms.ToolStripRenderEventArgs)
MyBase.OnRenderToolStripBorder(e)
Dim pen As New Pen(SystemColors.ControlDark, 2)
pen.Alignment = Drawing2D.PenAlignment.Inset
e.Graphics.DrawRectangle(pen, e.AffectedBounds)
End Sub
End Class
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4