Простой пример рисования линий мышкой на PictureBox.
Код
Imports System.Drawing
Public Class Form1
'*******************************************************************
'Простой пример рисования линий
'Для работы примера необходимо разместить на форме PictureBox1
'http://vbnet.su - Visual Basic .NET. Статьи. Примеры. Форум.
'*******************************************************************
'коллекция нарисованных линий
Private lines As New List(Of Line)
'позиция рисования
Private start As Point
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.PictureBox1.Image = New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height)
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
'запоминаем место, от куда нужно начинать рисовать
Me.start = e.Location
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
'запоминаем место, где закончили рисовать
Dim [end] As Point = e.Location
'создаем новую линию
Me.lines.Add(New Line(Me.start, [end]))
Dim area As New Rectangle(Math.Min(Me.start.X, [end].X), _
Math.Min(Me.start.Y, [end].Y), _
Math.Abs(Me.start.X - [end].X), _
Math.Abs(Me.start.Y - [end].Y))
area.Inflate(1, 1)
'обновляем PictureBox
Me.PictureBox1.Invalidate(area)
Me.PictureBox1.Update()
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
'рисуем линии
Me.DrawLines(e.Graphics)
End Sub
'сохранить
Private Sub Save()
Using g As Graphics = Graphics.FromImage(Me.PictureBox1.Image)
Me.DrawLines(g)
End Using
Me.Clear()
End Sub
'очистить
Private Sub Clear()
Me.lines.Clear()
Me.PictureBox1.Refresh()
End Sub
'прорисовка линий
Private Sub DrawLines(ByVal g As Graphics)
For Each line As Line In Me.lines
g.DrawLine(Pens.Black, line.Start, line.End)
Next line
End Sub
End Class
Public Class Line
Private _start As Point
Private _end As Point
Public Property Start() As Point
Get
Return Me._start
End Get
Set(ByVal value As Point)
Me._start = value
End Set
End Property
Public Property [End]() As Point
Get
Return Me._end
End Get
Set(ByVal value As Point)
Me._end = value
End Set
End Property
Public Sub New()
Me.New(Point.Empty, Point.Empty)
End Sub
Public Sub New(ByVal start As Point, ByVal [end] As Point)
Me._start = start
Me._end = [end]
End Sub
End Class
Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.
мне нужно то всего в PictureBox нажал левой кнопкой зафиксировал точку, нажал в другом месте этого же элемента нарисовал (правой удалить последнюю) линию и как можно проще. Если возможно.
24 ноября 2012, 12:32