2017-03-11 11 views
2

私はターゲットソフトウェアを開発しています。私は描画紐とサークル番号を使ってピクチャボックス上のショットを追跡する必要があります。私の問題は、前回のサークルのすべての数字が同じサークルに更新される(つまり、4つのサークルすべてが「4」、別のサークルが描画され、「5」に更新されるなど)すべてのサークルを描画することです。描画円上のテキストのインクリメント(リスト)

私がイメージして自分のコードを添付した

enter image description here

ここでは、コードです:

Public Class TargetAnalysis 
Dim n As Integer = 0 
Dim zoomPct As Decimal = 1 

Dim shotList As New List(Of Point) 
Dim scaleList As New List(Of Point) 
Dim poaList As New List(Of Point) 
Dim ShotCount As New List(Of Point) 

Private Sub mPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseClick 
    If e.Button = MouseButtons.Left Then 

     If shotFlag = True Then 
      n += 1 
      _shotX = e.X 
      _shotY = e.Y 


      shotList.Add(New Point(_shotX, _shotY)) 
      ShotCount.Add(New Point(_shotX, _shotY)) 

      shotDist = Math.Sqrt((_shotX - _poaX)^2 + (_shotY - _poaY)^2) 
      Me.lbDataPoints.Items.Insert(shotList.Count - 1, "SHOT - " & 
       FormatNumber(shotDist * pLineDist(), 2) & " in.") 
      Me.txtShotCount.EditValue = shotList.Count 

      mPictureBox.Refresh() 

     End If 
    end if 
End Sub 

Private Sub mPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles mPictureBox.Paint 


    'SHOT number 
    For Each s As Point In ShotCount 
     Dim calRad As Decimal = cboCaliber.EditValue/pLineDist()/2 

     Dim _shot As New ShotCount(e.Graphics, New Point(s.X + calRad, s.Y + calRad), cboCaliber.EditValue/pLineDist()/2, 
            "Consolas", FormatNumber((Math.Sqrt((s.X - _poaX)^2 + (s.Y - _poaY)^2)) * 
            pLineDist(), 2) & "in") 
    Next 

end sub 

このコードは増加しませんが、

+0

を示し、距離を持続しないが、弾丸はクラスでなければなりません。次に、各箇条書きを 'List(Of T)'に格納します。彼らがあなたの位置を更新するように動かすと、それで正しい位置に各弾をペイントします。作業領域を出ると、それらをリストから削除します。 – OneFineDay

+0

各箇条書きはクラス内にありますが、テキスト文字列を独自のクラスにも移動すると言っていますか?ありがとう –

+0

私はTextを処理するためにBulletNoクラスを追加しましたが、今私は以下を呼び出します:For Each t As Integer in _shotNo Dim _shotとして新しいBulletNo(e.Graphics、_shotX、_shotY、n、 "Consolas") 次。これはカウントを表示しますが、他のショットテキスト文字列を削除します。 –

答えて

0
Public Class TargetAnalysis 

    Dim shotList As New List(Of Point) 
    Dim shotFlag As Boolean 

    Private Function ShotDistance(ByVal shot As Point) As Double 
     ' _poaX and _poaY are the origin? 
     Return Math.Sqrt((shot.X - _poaX)^2 + (shot.Y - _poaY)^2) * pLineDist() 
    End Function 

    Private Sub mPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles mPictureBox.MouseClick 
     If e.Button = MouseButtons.Left AndAlso shotFlag Then 
      Dim shot As New Point(e.X, e.Y) 
      shotList.Add(shot)    
      shotDist = ShotDistance(shot) 

      Me.lbDataPoints.Items.Insert(shotList.Count - 1, String.Format("SHOT - {0:N2} in.", shotDist)) 

      Me.txtShotCount.EditValue = shotList.Count 
      mPictureBox.Refresh() 
     End If 
    End Sub 

    Private Sub mPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles mPictureBox.Paint 
     Dim calRad As Decimal = cboCaliber.EditValue/pLineDist()/2 

     For i As Integer = 0 To shotList.Count - 1 
      Dim shot As Point = shotList(i) 
      Dim dist As Double = ShotDistance(shot) 
      Dim labelLoc As New Point(shot.X + calRad, shot.Y + calRad) 
      Dim text As String = String.Format("Shot {0} - {1:N2} in.", i + 1, dist) 

      DrawShotLabel(e.Graphics, text, labelLoc) 
     Next i   
    End Sub 

    Private Sub DrawShotLabel(g As Graphics, label As String, location As Point) 
     Dim consolas As New Font("Consolas", 8) 
     Dim textSize As Size = g.MeasureString(label, consolas).ToSize() 
     g.FillRectangle(Brushes.White, New Rectangle(location, textSize)) 
     g.DrawString(label, consolas, Brushes.Black, location) 
    End Sub 

End Class 
+0

ジョエルに感謝します。私はこのアプローチを試みます。 –

+0

完璧に作業しました。私はいくつかの編集をしましたが、何も重要ではありません。ありがとう! –