事前準備
・フォームに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プログラミング関係一覧に戻る