Winforms中是否有一种方法可以更改ToolStrip项的形状。如果它是一个面板,我可以将Region设置为我的GraphicPath对象。但对于ToolStripItem,我不知道如何做到这一点,因为它不是从Control派生的。 alt text http://store.ezburn.com/images/productimages/toolstripbuttonshapes.jpg
答案 0 :(得分:0)
您需要在代码中创建自己的ToolStripRenderer和绘制按钮。使用这种方法,您可以模拟任何形状,通常几乎任何形状。
然后在自定义渲染器完成后,您需要将渲染器分配给工具条,就是这样。
描述编写自定义渲染器的article。
更新:您还可以查看this article,这对您的任务非常有用。
答案 1 :(得分:0)
我认为这是可能的,在看到仲裁员帖子中的第二个链接后,但我会保留我的解决方案。由于截止日期时间很短,我已将控制类型更改为普通按钮。在这里,我可以设置区域,并且能够通过将区域设置为我称为V形路径的区域来重现所需的外观。前两个按钮派生自Windows.Forms.Button,带有自定义绘制和区域设置。底部的两个按钮是带有自定义渲染器和自定义绘制的工具条按钮。
alt text 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