Как в ToolStrip сделать кнопку закрытия?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

percilacus
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.07.2009 (Вс) 18:13

Как в ToolStrip сделать кнопку закрытия?

Сообщение percilacus » 03.09.2009 (Чт) 20:23

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

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Как в ToolStrip сделать кнопку закрытия?

Сообщение 773FF » 06.09.2009 (Вс) 14:41

Поместить ToolStripButton в ToolStrip. ToolStripButton - может содержать текст и изображения. Рисуете три рисунка на кнопочку: просто кнопка, выбранная кнопка, нажатая кнопка и программно их меняете в соотв. событиях.

percilacus
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.07.2009 (Вс) 18:13

Re: Как в ToolStrip сделать кнопку закрытия?

Сообщение percilacus » 12.09.2009 (Сб) 19:37

Я кое-что сделал. Конечно у ьтого пользователя выглядит более профессионально.
Код: Выделить всё
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
перцилакус такой маленький а уже знает что такое хорошо а что такое плохо


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65

    TopList