【发布时间】:2017-03-19 11:48:51
【问题描述】:
我一直在尝试在 winforms vb.net 应用程序中达到以下结果
此图像中的每个弧或圆都是可点击的, 可点击的弧线是粉红色的。
我设法编写了以下代码
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
'Create pen objects
Dim p As New Pen(Color.Green, 30)
Dim p1 As New Pen(Color.Yellow, 30)
Dim p2 As New Pen(Color.Red, 30)
Dim p3 As New Pen(Color.Blue, 30)
'Create rectangle objects
Dim rt As New Rectangle(160, 150, 80, 100)
Dim rt1 As New Rectangle(100, 150, 80, 100)
Dim rt2 As New Rectangle(130, 120, 80, 100)
Dim rt3 As New Rectangle(130, 180, 80, 100)
'Draw arcs
e.Graphics.DrawArc(p, rt, 45, -90)
e.Graphics.DrawArc(p1, rt1, -135, -90)
e.Graphics.DrawArc(p2, rt2, -45, -90)
e.Graphics.DrawArc(p3, rt3, 135, -90)
End Sub
导致以下输出。
我没想到的是:
1- 如何为每个弧线制作边框。
2- 如何处理每个弧上的点击。
有没有比我试图解决这个问题更好的方法。
任何帮助将不胜感激。
【问题讨论】:
-
不,您不能将
Rectangle.Contains用于 Arcs。你应该使用GraphicsPath.IsVisible。看看这个帖子,例如:How can I treat the circle as a control after drawing it?。另请查看这篇文章以绘制这些弧线。 How to draw a circular progressbar pie using GraphicsPath in WinForm? -
您可以简单地创建一个类,其中包含绘制和命中测试对象所需的信息、一个
Rectangle属性以及StartAngle和EndAngle的两个整数属性。然后您可以简单地执行命中测试和绘图。对于绘图,接受Graphics对象作为Draw方法的参数并在其上绘制路径。 -
仅在需要时才会引发绘制事件。当表单需要重新绘制时,例如当您从最小化中恢复它时,或者当您将另一个窗口移到它上面时。你不需要做任何事情。只需设置
DoubleBuffered = true即可进行无闪烁绘画。 -
我可以将它作为第一个帖子的副本关闭。您也可以根据链接的帖子发布自己的答案。你喜欢什么?
标签: .net vb.net winforms visual-studio .net-4.0