作者:小赖小燕_380 | 来源:互联网 | 2023-09-23 17:46
Is there a way in Winforms to change the shape of a ToolStrip item. If it were a panel, I could set the Region to my GraphicPath object. But for ToolStripItem, I don't know how to do this, since it isn't derived from Control. alt text http://store.ezburn.com/images/productimages/toolstripbuttonshapes.jpg
Winforms中是否有一种方法可以更改ToolStrip项的形状。如果它是一个面板,我可以将Region设置为我的GraphicPath对象。但对于ToolStripItem,我不知道如何做到这一点,因为它不是从Control派生的。替代文字http://store.ezburn.com/images/productimages/toolstripbuttonshapes.jpg
2 个解决方案
I guess this is possible, after seeing the second link in arbiter's post, but I will keep my solution. With time being short because of deadlines, I've changed the type of control to a plain button. Here I can set the region, and have been able to reproduce the required look by setting the region to what I call the chevron path. The top two buttons are derived from Windows.Forms.Button with custom paint and region set. The bottom two buttons are the toolstrip buttons with custom renderer and custom paint.
我想这是可能的,在看到仲裁员帖子中的第二个链接后,我会保留我的解决方案。由于截止日期时间很短,我已将控制类型更改为普通按钮。在这里,我可以设置区域,并且能够通过将区域设置为我称为V形路径的区域来重现所需的外观。前两个按钮派生自Windows.Forms.Button,带有自定义绘制和区域设置。底部的两个按钮是带有自定义渲染器和自定义绘制的工具条按钮。
alt text http://store.ezburn.com/images/productimages/toolstripbuttonshapes-final.jpg
替代文字http://store.ezburn.com/images/productimages/toolstripbuttonshapes-final.jpg
I don't know if this will be helpful to anyone. But here's the code I use to set the region:
我不知道这对任何人都有帮助。但这是我用来设置区域的代码:
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