我正在尝试在目标上标记的“镜头”周围绘制一个选择矩形。我试图让它在“射击”的“范围”内射击,但它似乎随机出现。下面是我想要的图像(鼠标悬停在镜头周围的红色选择矩形)以及我的代码。
Dim r As Rectangle
Dim shotList As New List(Of Point)
Dim scaleList As New List(Of Point)
Dim ShotCount As New List(Of Point)
Dim shotListBounds As New List(Of Rectangle)
Private Sub DrawShotHover(g As Graphics, location As Point, ByVal radius As Integer)
Dim pn As New Pen(Brushes.Red, 2)
Dim dashValues As Single() = {2, 1, 2, 1}
pn.DashPattern = dashValues
g.DrawRectangle(pn, New Rectangle(location.X - radius, location.Y - radius, radius * 2, radius * 2))
End Sub
Private Sub mPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseClick
If e.Button = MouseButtons.Left Then
If shotFlag = True Then
Dim shot As New Point(e.X, e.Y)
shotList.Add(shot)
r = New Rectangle(e.X, e.Y, e.X + cboCaliber.EditValue / pLineDist() / 2, e.Y + cboCaliber.EditValue / pLineDist() / 2)
shotListBounds.Add(r)
shotDist = ShotDistance(shot)
mPictureBox.Invalidate()
End If
End Sub
Private Sub mPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles mPictureBox.Paint
If LineScaleVal > 0 Then
'SELECTION RECT
If shotHoverSel = True Then
DrawShotHover(e.Graphics, r.Location, cboCaliber.EditValue / pLineDist() / 2)
End If
'Point of Aim FLAG
Dim _poa As New POA(e.Graphics, New Point(_poaX, _poaY), cboCaliber.EditValue / pLineDist() / 2)
'SHOT FLAG
For Each b As Point In shotList
Dim _Bullet As New Bullet(e.Graphics, b, cboCaliber.EditValue / pLineDist() / 2, n)
Next
End Sub
Private Sub mPictureBox_MouseMove(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseMove
If shotListBounds.Count > 0 Then
For Each r As Rectangle In shotListBounds
Dim rad As Decimal = cboCaliber.EditValue / pLineDist()
If e.X >= r.X AndAlso e.X <= r.X + rad AndAlso e.Y >= r.Y AndAlso e.Y <= r.Y + rad Then
shotHoverSel = True
selShot = r.Location
End If
Next
End If
End Sub
Private Sub mPictureBox_MouseEnter(sender As Object, e As EventArgs) Handles mPictureBox.MouseEnter
If shotHoverSel = True Then
mPictureBox.Invalidate()
End If
End Sub
Private Sub mPictureBox_MouseLeave(sender As Object, e As EventArgs) Handles mPictureBox.MouseLeave
If shotHoverSel = False Then
mPictureBox.Invalidate()
End If
End Sub
答案 0 :(得分:0)
实际上有一个名为MouseEnter的事件。创建一个处理mPictureBox.MouseEnter
的方法