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

事前準備
・フォームにPictureBoxを貼り付け、DockプロパティをFillにする
・BackColorをWhiteにする
・サイズはお好みで


クリック2回指定で四角形を描画していきます。
(1回目のクリックで始点を指定、2回目のクリックで終点を指定)


Public Class Form1
 Private ClickCount As Integer
 Private rect(0) As Rectangle
 Private StX As Integer
 Private StY As Integer
 Private linePen As Pen = New Pen(Color.Green, 1)

 Private Sub PictureBox_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseClick
  If ClickCount = 0 Then
   ClickCount = 1
   StX = e.X : StY = e.Y
  Else
   ClickCount = 0
   ReDim Preserve rect(UBound(rect) + 1)
   Dim x As Integer = Math.Min(StX, e.X)
   Dim y As Integer = Math.Min(StY, e.Y)
   Dim wid As Integer = Math.Abs(StX – e.X)
   Dim hei As Integer = Math.Abs(StY – e.Y)
   rect(UBound(rect)) = New Rectangle(x, y, wid, hei)
  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
   Dim x As Integer = Math.Min(StX, e.X)
   Dim y As Integer = Math.Min(StY, e.Y)
   Dim wid As Integer = Math.Abs(StX – e.X)
   Dim hei As Integer = Math.Abs(StY – e.Y)
   rect(0) = New Rectangle(x, y, wid, hei)
   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(rect)
   e.Graphics.DrawRectangle(linePen, rect(i))
  Next
 End Sub
End Class



こんな感じになります。
「次々と直線を描画する」ができれば問題ないと思います。
ラバーバンドということでDrawRectangleを使用しましたが、
DrawLineで4本の直線を引いても同じことができます。
「次々と直線を描画する」を発展させてみて下さい。


また、毎回四角形を消去するタイプ(マウスで範囲指定をする、など)は、
こちらを参照願います。



関連記事

・次々と直線を描画する

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

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



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



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



google検索の結果


system-development