Как установить эквивалент Region для ToolStripItem - PullRequest
0 голосов
/ 23 июня 2009

Есть ли способ в Winforms изменить форму элемента ToolStrip. Если бы это была панель, я мог бы установить Region для моего объекта GraphicPath. Но для ToolStripItem я не знаю, как это сделать, поскольку он не является производным от Control. альтернативный текст http://store.ezburn.com/images/productimages/toolstripbuttonshapes.jpg

Ответы [ 2 ]

0 голосов
/ 23 июня 2009

Полагаю, это возможно, увидев вторую ссылку в сообщении арбитра, но я оставлю свое решение. Из-за сжатых сроков я изменил тип элемента управления на обычную кнопку. Здесь я могу установить регион и смог воспроизвести требуемый вид, установив для региона то, что я называю шевронным путем. Две верхние кнопки взяты из Windows.Forms.Button с настраиваемой краской и набором областей. Две нижние кнопки - это кнопки панели инструментов с настраиваемым средством визуализации и рисованием.

альтернативный текст http://store.ezburn.com/images/productimages/toolstripbuttonshapes-final.jpg

Я не знаю, будет ли это кому-нибудь полезно. Но вот код, который я использую для установки региона:

    Private Sub setRegion()

        Dim r As Rectangle = ClientRectangle
        Me.Region = New Region(getChevronPath(r.X, r.Y, r.Width, r.Height))

    End Sub

 Private Function getChevronPath(ByVal X As Single, ByVal Y As Single, _
       ByVal width As Single, ByVal height As Single) As GraphicsPath

        Dim w As Integer = Convert.ToInt32(X + width - ChevronHeight)
        Dim hh As Integer = Convert.ToInt32(height / 2)

        Dim gp As New GraphicsPath()
        'top
        gp.AddLine(X, Y, w, Y)
        'arrowtop, on the right
        gp.AddLine(w, Y, w + ChevronHeight, hh)
        'arrowbottom, on the right
        gp.AddLine(w + ChevronHeight, hh, w, Y + height)
        'bottom
        gp.AddLine(w, Y + height, X, Y + height)

        If EndButton Then
            'left
            gp.AddLine(X, Y + height, X, Y)
        Else
            'arrowbottom, on the left
            gp.AddLine(X, Y + height, ChevronHeight, hh)
            'arrowtop on the left
            gp.AddLine(ChevronHeight, hh, X, Y)
        End If

        gp.CloseFigure()

        Return gp
    End Function
0 голосов
/ 23 июня 2009

Вам нужно создать свой собственный ToolStripRenderer и рисовать кнопки в своем коде. При таком подходе вы можете смоделировать любую форму и вообще почти все.

Затем, после того, как пользовательский рендерер будет завершен, вам нужно будет назначить ваш рендерер на toolstrip, и все.

Статья , описывающая написание пользовательских средств визуализации.

Обновление: Вы также можете проверить эту статью , это может быть полезно для вашей задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...