0
ターゲットにマークした「ショット」の周りに選択矩形を描画しようとしています。私はそれが射撃の「範囲」内にあるときにそれを発射しようとしているが、それはランダムに現れると思われる。以下は私のコードと一緒に私が望むもの(マウスの上にマウスを置いたときにショットの周りの赤い選択矩形)のイメージです。マウス移動イベントの選択ボックス
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
ありがとうございます。私はそれを試してみる。 –
あなたがコントロールを入力すると、マウスの入力イベントが発生すると思います。私は描画矩形(GDI +)の座標を "入力"しています。 –
私はmouseenter/mouseleaveイベントを無駄にしようとしました。矩形は最後にクリックされたショットのみを強調表示しますが、マウスがショット上を移動すると、マウスの移動イベントが発生します。矩形はちょうど描画しません... –