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

次々と直線を描画する」をちょっとだけ発展させてみました。
事前準備は大量にあるため、一番下に書きます。

直線の太さと色を指定し、次々と直線を描画していきます。
一時的な線が一番上に表示されるように、Paintイベント中で、
描画順を変更しております。
※フォームのリサイズなどでも描画は消えません


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
  Dim col As Color
  Dim wid As Integer
 End Structure


 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
   Lines(0).col = Label1.BackColor : Lines(0).wid = NumericUpDown1.Value
   NumericUpDown1.Enabled = False : Button1.Enabled = False
  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
   Lines(UBound(Lines)).col = Lines(0).col : Lines(UBound(Lines)).wid = Lines(0).wid
   NumericUpDown1.Enabled = True : Button1.Enabled = True
  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 = 1 To UBound(Lines)
   e.Graphics.DrawLine(New Pen(Lines(i).col, Lines(i).wid), Lines(i).stX, Lines(i).stY, Lines(i).enX, Lines(i).enY)
  Next
  e.Graphics.DrawLine(New Pen(Lines(0).col, Lines(0).wid), Lines(0).stX, Lines(0).stY, Lines(0).enX, Lines(0).enY)
 End Sub


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ColorDialog1.Color = Label1.BackColor
  If (ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
  Label1.BackColor = ColorDialog1.Color
  End If
 End Sub
End Class


事前準備
・フォームのサイズを(300 , 300)に変更
・Panelを上の方に貼り、DockプロパティをTOPへ変更
・PictureBoxを下へ貼り、DockプロパティをFillへ変更
・Panel内に、「NumericUpDown」と「Label」、「Button」を貼る
・ColorDialogを持ってきて、適当なところへ持ってくる

後はお好みです。
(NumericUpDownの上限と下限をいじる、など)


draw-line


関連記事

・次々と直線を描画する

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



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




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



google検索の結果はこちら