「一時的に線を描画する」を発展させました。
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…配列の最後に一時的な線分の部分の情報を入れていきます。
これをもう少し発展させてみます。
関連記事
・次々と直線を描画する(ver2)
・ラバーバンド(Paintイベント処理)
システム開発のためのVB.NETプログラミング関係一覧に戻る