次々と直線を描画する

一時的に線を描画する」を発展させました。
2点クリックで、次々と直線を描画していきます。
事前準備はこちら
※フォームのリサイズなどでも描画は消えません

Public Class Form1

 Private ClickCount As Integer
 Private Lines(0) As Line
 Private Structure Line
  Dim stX As Integer
  Dim stY As Integer
  Dim enX As Integer
  Dim enY As Integer
 End Structure
 Private linePen As Pen = New Pen(Color.Green, 3)

 Private Sub PictureBox_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseClick
  If ClickCount = 0 Then
   ClickCount = 1
   Lines(0).stX = e.X : Lines(0).stY = e.Y
   Lines(0).enX = e.X : Lines(0).enY = e.Y
  Else
   ClickCount = 0
   ReDim Preserve Lines(UBound(Lines) + 1)
   Lines(UBound(Lines)).stX = Lines(0).stX : Lines(UBound(Lines)).stY = Lines(0).stY
   Lines(UBound(Lines)).enX = Lines(0).enX : Lines(UBound(Lines)).enY = Lines(0).enY
  End If
  PictureBox1.Invalidate()
 End Sub

 Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove
  If ClickCount = 1 Then
   Lines(0).enX = e.X : Lines(0).enY = e.Y
   PictureBox1.Invalidate()
  End If
 End Sub

 Private Sub Picture_Box(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
  For i As Integer = 0 To UBound(Lines)
   e.Graphics.DrawLine(linePen, Lines(i).stX, Lines(i).stY, Lines(i).enX, Lines(i).enY)
  Next
 End Sub

End Class

一時的な線分を配列の(0)に入れ、確定した線分を次以降に入れていきます。
MouseClickイベントのElse~EndIfまでの処理は、
ReDim…線分の情報を持った配列を1つ多くしています。
Lines…配列の最後に一時的な線分の部分の情報を入れていきます。

draw-line

これをもう少し発展させてみます。


関連記事

・次々と直線を描画する(ver2)

・ラバーバンド(Paintイベント処理)



システム開発のためのVB.NETプログラミング関係一覧に戻る



システム開発の【Spread i-Vision】



google検索の結果はこちら