- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直试图在 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- 如何处理每个圆弧上的点击。
有没有比我尝试实现这一目标的方式更好的方式。
如有任何帮助,我们将不胜感激。
最佳答案
特别感谢 Reza Aghaei 的帮助,我在我的解决方案中使用了以下代码
编辑:改进的答案
配置图形路径,代码更简洁
Imports System.Drawing.Drawing2D
Public Class SurfaceSelection
Private Sub SurfaceSelection_Click(sender As Object, e As MouseEventArgs) Handles Me.Click
Dim hitSurface As String = String.Empty
If GetPath(EnumsClass.SurfacesEnum.L).IsVisible(e.Location) Then
hitSurface = "L"
ElseIf GetPath(EnumsClass.SurfacesEnum.M).IsVisible(e.Location) Then
hitSurface = "M"
ElseIf GetPath(EnumsClass.SurfacesEnum.F).IsVisible(e.Location) Then
hitSurface = "F"
ElseIf GetPath(EnumsClass.SurfacesEnum.D).IsVisible(e.Location) Then
hitSurface = "D"
Else
hitSurface = "Missed"
End If
MsgBox(hitSurface)
End Sub
Private Sub SurfaceSelection_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Me.DrawPath(EnumsClass.SurfacesEnum.L, e)
Me.DrawPath(EnumsClass.SurfacesEnum.M, e)
Me.DrawPath(EnumsClass.SurfacesEnum.F, e)
Me.DrawPath(EnumsClass.SurfacesEnum.D, e)
End Sub
Private Sub DrawPath(ByVal v_bytSurface As EnumsClass.SurfacesEnum, ByVal e As System.Windows.Forms.PaintEventArgs)
Using p As GraphicsPath = GetPath(v_bytSurface)
e.Graphics.FillPath(Brushes.Green, p)
e.Graphics.DrawPath(Pens.Black, p)
End Using
End Sub
Private Function GetPath(ByVal v_bytSurface As EnumsClass.SurfacesEnum) As GraphicsPath
Dim path As New GraphicsPath
Dim center = New Point(100, 100)
Dim innerR = 70
Dim thickness = 20
Dim startAngle = getGraphicsPathAngle(v_bytSurface)
Dim arcLength = 70
Dim outerR = innerR + thickness
Dim outerRect = New Rectangle(center.X - outerR, center.Y - outerR, 2 * outerR, 2 * outerR)
Dim innerRect = New Rectangle(center.X - innerR, center.Y - innerR, 2 * innerR, 2 * innerR)
path.AddArc(outerRect, startAngle, arcLength)
path.AddArc(innerRect, startAngle + arcLength, -arcLength)
path.CloseFigure()
Return path
End Function
Private Function getGraphicsPathAngle(ByVal v_bytSurface As EnumsClass.SurfacesEnum) As Integer
Select Case v_bytSurface
Case EnumsClass.SurfacesEnum.F
Return 235
Case EnumsClass.SurfacesEnum.O
Return 0
Case EnumsClass.SurfacesEnum.L
Return 55
Case EnumsClass.SurfacesEnum.M
Return 145
Case EnumsClass.SurfacesEnum.D
Return 325
Case EnumsClass.SurfacesEnum.Unspecified
Return -1
End Select
End Function
End Class
Public Class EnumsClass
Public Enum SurfacesEnum As Byte
Unspecified = 0
F = 1
O = 2
L = 3
M = 4
D = 5
End Enum
End Class
我在以下 stackoverflow 问题中使用了 Reza 的回答:
How to draw a circular progressbar pie using GraphicsPath in WinForm?
How can I treat the circle as a control after drawing it? - Moving and selecting shapes
关于.net - 如何处理 System.Drawing 形状上的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443083/
Draw joust是什么游戏 Draw joust是一款voodoo推出的玩家对战类游戏,Draw joust游戏中文版叫做手绘战车游戏。 这次voodoo将该游戏的玩法再度升级,难度也有所提
我在本地托管了 draw.io,我们正在使用它来直观地表示仓库中托盘的位置。问题在于,当你在周围拖动托盘时,你经常会不小心调整它们的大小,这很痛苦。无论如何我可以禁用它或锁定托盘的大小吗? 最佳答案
我想在 draw.io 中格式化一个矩形,这样只有一个边框(左边框)是黑色的,其他边框:顶部、右侧和底部必须保持“清晰”。 我试图找出正确的编码来仅影响这些元素,但似乎您只能使用样式键影响整个边框:i
我的线正在连接,即使我没有将它们设置为多边形。 我的脚本基于 pyshp 包。 我的脚本如下所示: w=Shapefile.Writer() #shapetype 11 is a polylineZ
我在表单值中有一个标题(“cadeau check 50 €”),我想使用 arial.ttf 将其写入背景图像。我的文字是正确的,但对于欧元符号。我有 2 [] 到位。我不知道问题出在哪里。这是 P
我收到上述错误。我需要帮助修复它。我看过this question它似乎对我没有任何帮助,我在与需要它的指令相同的元素上拥有所需的指令。我也不明白为什么我的错误说无法找到指令“绘图”所需的 Contr
我正在使用 VBUC 将 VB6 应用程序迁移到 C#但我得到了这个错误: 无法将类型“System.Drawing.Image”转换为“System.Drawing.Icon”我的代码是:
我有一行代码是从某个地方借来的,Visual Studio 无法解决 Bitmap或 ImageConverter类引用。 我有: using System.Drawing; 代码行是 Image x
我正在尝试将花费很长时间的大型 Lucidchart 图转换为 Draw.io。 Draw.io 推荐 ctr-a、ctr-c、ctr-v,但这似乎不起作用。然而,Draw.io 也隐晦地提到: dr
我想显示一个相对较长的图表。我曾经使用过 javafx Canvas ,但有时会出现缓冲区溢出异常,因为绘制了很多值。我正在寻找一种不同的方法,并找到了一种使用 java.awt.graphics2d
我很困惑 System.Drawing.Image 和 System.Drawing.Bitmap 之间有什么不同 有人可以解释这两种类型之间的主要区别吗? 为什么要使用 System.Drawing
声明了一个位图 private Bitmap img1 = null; private Bitmap img2 = null; 从openFileDialog中选择图像后,图像将被放置。 选定的图
我想遍历 System.Drawing.Color 结构并使用它来初始化笔列表。 我是这样试的,但是字段类型不合适: colorList = new List(); foreach (
System.Drawing.Point 和 System.Drawing.PointF 有什么区别。你能举个这两者之间的例子吗? 提前致谢。 最佳答案 Point 使用整数坐标(int 代表 X 和
我正在为我们公司开发 WinForm 打印应用程序。 打印文档时,我需要获取文档上每个控件的System.Drawing.Color属性,并创建一个System.Drawing.Brush对象来画出来
我正在使用这个从另一个应用程序获取图标: Icon IEIcon = Icon.ExtractAssociatedIcon(@"C:\Program Files\Internet Explorer\
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
在 UIView 子类中,我覆盖了 Draw 子类以绘制一些自定义文本,但文本始终绘制为翻转文本。 这是我正在使用的代码: class TextViewProblem : UIView { publi
我想从 Zotero 导出的嵌套 XML/JSON(嵌套在子集合和集合中的单个项目)以编程方式生成 draw.io map 图。 我已经有了基本的 JSON/XML,可以适应 draw.io 的格式,
1) 重新绘制与绘制 这是一个哲学问题,但是...在不同分辨率下渲染游戏的“正确”或“可接受”的方式是什么(2d,我理解 OGL 视角如何工作...)?我应该为我的图像(如 Android APK)添
我是一名优秀的程序员,十分优秀!