Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - jmcilhinney -

Visual Basic .NET - Графика

Все примеры / Мультимедиа / Графика

Простой пример рисования линий

Автор: jmcilhinney | добавлено: 06.03.2010, 17:44 | просмотров: 4577 (1+) | комментариев: 5 | рейтинг: *x1
Простой пример рисования линий мышкой на 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
Об авторе

jmcilhinney

Нет информации об авторе...
jmcilhinney
Последние комментарии (всего: 5)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.

Где же он простой? В VB6 это было в одну строку, а теперь в 50?
Это наверное класс выглядит пугающе :) Кода можно и меньше написать, без классов. Но с классами удобней, ООП все-таки.
мне нужно то всего в PictureBox нажал левой кнопкой зафиксировал точку, нажал в другом месте этого же элемента нарисовал (правой удалить последнюю) линию и как можно проще. Если возможно.
Рисование в болле простом виде вот: http://kbyte.ru/ru/Programming/Sources.aspx?id=367&mode=show (ссылка может поломаться в тексте комментария, нужно проверить, что бы не было в ней пробелов)

Для мыши нужна переменная на уровне класса формы и обработчик события MouseDown и MouseUp, как в этом примере.
Спасибо, то что нужно.
Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики