2017-03-16 15 views
0

ターゲットにマークした「ショット」の周りに選択矩形を描画しようとしています。私はそれが射撃の「範囲」内にあるときにそれを発射しようとしているが、それはランダムに現れると思われる。以下は私のコードと一緒に私が望むもの(マウスの上にマウスを置いたときにショットの周りの赤い選択矩形)のイメージです。マウス移動イベントの選択ボックス

Red Rectangle is the "selection" rectangle

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

のMouseEnterと呼ばれるこのイベントのためには、実際にあります。 mPictureBox.MouseEnterを処理するメソッドを作成します。

+0

ありがとうございます。私はそれを試してみる。 –

+0

あなたがコントロールを入力すると、マウスの入力イベントが発生すると思います。私は描画矩形(GDI +)の座標を "入力"しています。 –

+0

私はmouseenter/mouseleaveイベントを無駄にしようとしました。矩形は最後にクリックされたショットのみを強調表示しますが、マウスがショット上を移動すると、マウスの移動イベントが発生します。矩形はちょうど描画しません... –

関連する問題