В этой лекции вы узнаете, как:
System.Drawing для добавления графики в формы;Для многих разработчиков добавление в приложение графики и специальных эффектов является наиболее захватывающей и притягательной частью программирования. К счастью, создание впечатляющих и полезных графических эффектов с помощью Microsoft Visual Basic .NET очень просто и эффективно. В этой лекции вы узнаете, как добавлять в ваши программы интересные "фишки". Вы узнаете, как создавать красивые изображения, с помощью элементов управления PictureBox и Timer создавать простые эффекты анимации, и расширять или сжимать с помощью свойств Height и Width элементы управления во время выполнения программы. В итоге у вас будет достаточно знаний, чтобы создать полностью завершенный интерфейс пользователя.
Line и Shape. Область элементов Visual Basic .NET больше не предоставляет элементов управления для рисования. Вместо этого вы должны непосредственно использовать графические службы GDI+, доступные через пространство имен System.Drawing.Circle, Line и PSet заменены двумя методами: DrawEllipse и DrawLine и структурой Point, принадлежащими классу System.Drawing.Graphics.Move. Элементы управления Visual Basic .NET не имеют метода Move, но они могут быть быстро перемещены, если вы обновите одно из свойств элемента управления Left, Top или Location, или если вы используете метод SetBounds.DragDrop, свойства DragIcon и DragMode больше не доступны.System.Drawing.Imaging содержит функции для работы со следующими форматами изображений: BMP, В лекциях 2, 3 и 7 вы экспериментировали с добавлением в форму растровых изображений и значков с помощью объектов области вывода изображений. Теперь вы узнаете, как с помощью функций GDI+ из пространства имен System.Drawing, являющегося новым API (application programming interface - интерфейсом прикладного программирования ) для создания графики, в ваших формах создавать уникальные изображения. Создаваемые вами изображения могут добавить в ваши формы цвет, геометрические фигуры и текстуры, при этом использовать их очень легко.
Первое, что требуется изучить при работе с графикой - это координатную систему формы. В Visual Basic каждая форма имеет свою систему координат. Начальная точка системы координат находится в верхнем левом углу формы. Система координат по умолчанию состоит из строк и столбцов аппаратно-независимых графических элементов -пикселей. Они представляют собой наименьшие точки, которые вы можете использовать в форме Visual Basic.
В системе координат Visual Basic строки пикселей расположены вдоль оси x (горизонтальная ось), а столбцы пикселей располагаются вдоль оси y (вертикальная ось). Вы можете определить положение в системе координат, указав пересечение строки и столбца с помощью записи (x, y). Координаты (x, y) верхнего левого угла формы всегда равны (0, 0). На следующей иллюстрации показано, как описывается в системе координат Visual Basic расположение в форме объекта области вывода изображений.

Visual Basic общается с драйвером видеокарты вашего компьютера и с его помощью определяет, как в форме отображаются пиксели и различные фигуры (линии, прямоугольники, кривые и окружности). Для отображения конкретных фигур, таких, как линия, показанная на следующей иллюстрации, используется много пикселей. Логика, которая используется для отображения этого типа графики - не ваша забота, она выполняется графическим адаптером и процедурами рисования из графической библиотеки GDI+. На следующей иллюстрации показано увеличенное изображение искажений или ломаных краев, которые вы иногда можете видеть в приложениях Visual Basic и Windows.

Пространство имен System.Drawing включает многочисленные классы для создания графики. В этом разделе вы узнаете о классе System.Drawing.Graphics, который предоставляет методы и свойства для рисования геометрических фигур. О других классах вы можете узнать в справочной системе Visual Basic .NET.
Независимо от того, создаете ли вы простую фигуру или сложный чертеж, важно иметь возможность рисовать в ваших программах большую часть стандартных геометрических фигур. Следующая таблица содержит перечень базовых фигур и методов класса System.Drawing.Graphics.
| Фигура | Метод | Описание |
|---|---|---|
| Линия | DrawLine | Простая линия, построенная по двум точкам |
| Прямоугольник | DrawRectangle | Прямоугольник или квадрат с четырьмя точками |
| Дуга | DrawArc | Изогнутая линия с двумя точками (часть эллипса) |
| Окружность/эллипс | DrawEllipse | Округлая фигура, вписанная в прямоугольник. |
| Полигон, многоугольник | DrawPolygon | Сложная фигура с произвольным числом вершин и сторон (хранящихся в массиве) |
| Кривая | DrawCurve | Изогнутая линия, проходящая через произвольное количество точек (хранящихся в массиве); также называется фундаментальным сплайном |
| Кривые (сплайны) Безье | DrawBezier | Кривая, построенная с помощью четырех точек (точки номер 2 и 3 являются "управляющими" точками) |
В дополнение к приведенным здесь методам, которые создают пустые или "незаполненные" фигуры, существует несколько методов, которые рисуют фигуры, автоматически заполняемые каким-либо цветом. Эти методы обычно имеют префикс "Fill" (заполнить) и включают FillRectangle, FillEllipse и FillPolygon. Когда вы используете графический метод класса System.Drawing.Graphics, вы должны создать в вашем коде объект Graphics, представляющий этот класс, и либо объект Pen (перо), либо Brush (кисть), указывающий атрибуты фигуры, которую вы хотите нарисовать, такие, как толщина линии и цвет заливки. Объект Pen передается как один из аргументов в методы, которые не заполняют фигуру цветом. Объект Brush передается как аргумент, когда необходимо выполнить цветную заливку. Например, следующий вызов метода DrawLine для рисования линии, которая начинается с пикселя (20, 30) и заканчивается пикселем (100, 80), использует объект Pen и четыре целых значения. Объект Graphics объявляется с использованием имени GraphicsFun, а объект Pen объявляется с использованием имени PenColor.
Dim GraphicsFun As System.Drawing.Graphics Dim PenColor As New System.Drawing.Pen(System.Drawing.Color.Red) GraphicsFun = Me.CreateGraphics GraphicsFun.DrawLine(PenColor, 20, 30, 100, 80)
Синтаксис метода DrawLine важен, но обратите также внимание на предшествующие ему три строчки, которые требуются для использования класса System.Drawing.Graphics. Вы должны создать переменные для представления обоих объектов Graphics и Pen, и переменная Graphics должна быть создана с помощью метода CreateGraphics, принадлежащего форме Windows. Заметьте, что пространство имен System.Drawing.Graphics включается в ваш проект автоматически - вам не требуется включать в ваш код оператор Imports для объявления требуемого класса.
Если вы протестируете показанный выше метод DrawLine в программе, то заметите, что созданная линия сохраняется в форме только до тех пор, пока ее что-нибудь не закроет. Если в какой-то момент в форме появится диалоговое окно, которое закроет собой эту линию, то при его исчезновении линия больше не будет видна. Линия также исчезнет, если вы минимизируете окно формы, а затем снова его развернете. Чтобы устранить эту проблему, вы должны поместить ваш графический код в процедуру события Paint формы так, что каждый раз, при обновлении формы, графика также перерисовывалась.
В следующем упражнение вы с помощью процедуры события Paint формы создадите три фигуры. Нарисованные вами фигуры будут сохраняться в форме даже тогда, когда форма будет перекрываться другим окном или минимизироваться.
Form1_Paint формы код программы.Text формы Form1 на значение Рисование фигур.Form1.Paint.Form1_Paint. Это место, где вы должны ввести код программы, который должен исполняться при обновлении формы Visual Basic.Введите следующий код программы:
'Готовим переменную GraphicsFun для графических вызовов Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics 'Для рисования линии и эллипса используем перо красного цвета Dim PenColor As New System.Drawing.Pen(System.Drawing.Color.Red) GraphicsFun.DrawLine(PenColor, 20, 30, 100, 80) GraphicsFun.DrawEllipse(PenColor, 10, 120, 200, 160) 'Для создания заполненного прямоугольника используем кисть зеленого цвета Dim BrushColor As New SolidBrush(Color.Green) GraphicsFun.FillRectangle(BrushColor, 150, 10, 250, 100)
Этот пример процедуры события рисует три графические фигуры - красную линию, красный эллипс и заполненный зеленым цветом прямоугольник. Чтобы программирование графики стало доступно, процедура объявляет в коде переменную с именем GraphicsFun и использует метод CreateGraphics для активизации (или присвоения значения) этой переменной. Переменная PenColor типа System.Drawing.Pen используется для установки цвета рисования линии и эллипса, а переменная BrushColor типа SolidBrush используется для установки цвета заливки прямоугольника. Эти примеры являются только самой верхушкой айсберга графической библиотеки - существует множество различных фигур, цветов и их вариантов, которые можно использовать с помощью методов класса System.Drawing.Graphics.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic загрузит форму и выполнит событие Paint этой формы. Ваша форма будет выглядеть примерно так.

Paint формы снова выполнится, и графические фигуры обновятся.Вывод растровых изображений и рисование фигур добавляет программе визуальную привлекательность, но для программистов королевой графических эффектов всегда была анимация. Анимация - это имитация движения, производимая быстрым отображением на экране серии связанных между собой изображений. Настоящая анимация требует программного перемещения объектов, и часто использует также изменение размера или формы изображения.
В этом разделе вы узнаете, как добавлять в ваши программы простую анимацию. Вы узнаете, как обновлять свойства Top и Left области вывода изображений, управлять скоростью анимации с помощью объекта таймера и обнаруживать границу окна вашей формы.
В Visual Basic 6 специальный метод с именем Move позволял перемещать объекты в системе координат. Метод Move больше не поддерживается элементами управления Visual Basic .NET; однако вместо него вы можете использовать следующие методы и свойства:
| Ключевое слово | Описание |
|---|---|
| Left | Это свойство может быть использовано для горизонтального перемещения объекта (влево или вправо). |
| Top | Это свойство может быть использовано для вертикального перемещения объекта (вверх или вниз). |
| Location | Это свойство может быть использовано для перемещения объекта в указанное место. |
| SetBounds | Этот метод устанавливает границы объекта, задавая его размер и положение. |
В следующем разделе обсуждается, как использовать для перемещения объектов свойства Left, Top и Location. Чтобы получить дополнительную информацию о методе SetBounds, найдите ключевое слово SetBounds в справочной системе Visual Basic.
Свойства Left и Top позволяют перемещать объект. Чтобы переместить объект в горизонтальном направлении, используйте свойство Left. Left имеет следующий синтаксис
объект.Left = по-горизонтали
где объект - это имя объекта формы, который вы хотите переместить, а по-горизонтали - это новая горизонтальная (по оси x) координата левого края объекта, измеренная в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в точку, расположенную в 300 пикселях справа от левого края окна:
PictureBox1.Left = 300
Чтобы переместить объект на относительное расстояние, вы должны добавлять или вычитать пиксели из текущего значения свойства Left. Например, чтобы переместить объект на 50 пикселей вправо, вы должны добавить к свойству Left значение 50, как показано здесь:
PictureBox1.Left = PictureBox1.Left + 50
Аналогично, вы можете изменить вертикальное положение объекта на форме, установив его свойство Top. Синтаксис свойства Top имеет вид
объект.Top = по-вертикали
где объект - это имя объекта формы, который нужно переместить, а по-вертикали - это новая вертикальная (по оси y) координата верхнего края объекта, измеренная в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в точку, расположенную в 150 пикселях ниже строки заголовка окна:
PictureBox1.Top = 150
Относительное перемещение вверх или вниз осуществляется с помощью добавления или вычитания пикселей из текущего значения свойства Top. Например, чтобы переместить объект на 30 пикселей вниз, нужно добавить к свойству Top значение 30, как показано здесь:
PictureBox1.Top = PictureBox1.Top + 30
Чтобы переместить объект одновременно в вертикальном и горизонтальном направлении, довольно просто использовать комбинацию значений свойств Left и Top. Например, чтобы переместить объект области вывода изображений в координаты (300, 200), можно ввести следующий код программы:
PictureBox1.Left = 300 PictureBox1.Top = 200
Однако разработчики Visual Basic .NET не рекомендуют использовать два оператора программы для перемещения объекта, если вы планируете делать много перемещений объектов программы (например, если во время сложного анимационного эффекта вы планируете перемещать объекты сотни или тысячи раз). Вместо этого Microsoft рекомендует использовать свойство Location, имеющее синтаксис
объект .Location = New Point(по-горизонтали, по-вертикали)
где объект - это имя объекта, по-горизонтали - это горизонтальная координата по оси x, по-вертикали - это вертикальная координата по оси y, а Point - это структура, определяющая положение верхнего левого угла объекта в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в координаты (300, 200):
PictureBox1.Location = New Point(300, 200)
Чтобы с помощью свойства Location выполнить относительное перемещение, требуются свойства Location.X и Location.Y. Например, оператор программы
PictureBox1.Location = New Point(PictureBox1.Location.X - 50, _ PictureBox1.Location.Y - 40)
перемещает объект области вывода изображений формы на 50 пикселей влево и на 40 пикселей вверх. Хотя эта конструкция кажется несколько громоздкой, она является рекомендуемым способом перемещения объектов вашей формы во время выполнения программы.
Фокус с созданием анимации в программе состоит в помещении в процедуру события таймера одного или нескольких изменений свойства Location. При этом через определенные интервалы времени таймер будет заставлять один или несколько объектов перемещаться по экрану. В лекции 7 вы узнали о том, как использовать объект таймера для обновления раз в секунду простой утилиты часов так, что она отображала правильное время. Когда вы создаете анимацию, вы устанавливаете свойство Interval таймера на ускоренное обновление - 1/5 секунды (200 миллисекунд), 1/10 секунды (100 миллисекунд) или меньше. Точная скорость зависит от того, на сколько быстро с вашей точки зрения должна выполняться анимация.
Еще один фокус состоит в использовании свойств Top и Left и размера формы для определения краев этой формы. Использование в процедуре события этих значений позволит вам останавливать анимацию (отключать таймер), когда объект достигает границы формы. Используя свойство Top, свойство Left, свойства, содержащие размер формы, и структуру выбора If...Then или Select Case, вы можете заставить объект отскакивать от одного или нескольких краев формы.
Следующее упражнение демонстрирует, как вы можете с помощью свойства Location и объекта таймера анимировать область вывода изображений, содержащую значок солнца (Sun.ico). В этом упражнении для обнаружения верхнего края формы вы будете использовать свойство Top, а для обнаружения нижнего края - свойство Size.Height. Значок солнца будет перемещаться вверх-вниз между этими двумя границами каждый раз, когда вы щелкаете на кнопке.
Button, нарисуйте в нижнем левом углу формы две кнопки.PictureBox, нарисуйте в нижнем правом углу формы небольшой прямоугольный объект области вывода изображений. Это объект программы, который вы будете анимировать.Timer, находящемся на закладке Windows Forms окна Toolbox (Область элементов), чтобы добавить его в область компонент, находящуюся ниже формы. Таймер будет управлять скоростью анимации. Вспомните, что таймер сам по себе не отображается на форме, так что он показывается под формой в области компонент, предназначенной для невидимых объектов.Установите для формы и объектов кнопки, области вывода изображений и таймера следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Button1 | Text | Переместить вверх |
| Button2 | Text | Переместить вниз |
| PictureBox1 | Image | c:\vbnet03sbs\Гл.16\sun.ico |
| SizeMode | StretchImage | |
| Timer1 | Enabled | False |
| Interval | 75 | |
| Form1 | Text | Простая анимация |
Когда вы установите эти свойства, ваша форма будет выглядеть примерно так, как показано на рисунке ниже.

Button1_Click.Введите следующий код программы:
GoingUp = True Timer1.Enabled = True
Эта простая процедура события устанавливает переменную GoingUp на значение True и включает объект таймера. Реальный код программы для перемещения объекта области вывода изображений и определения правильного направления находится в процедуре события Timer1_Tick.
Прокрутите программный код формы в самый верх и под тегом "Windows Form Designer generated code" ("Код, автоматически созданный конструктором форм Windows") введите следующее объявление переменной:
Dim GoingUp As Boolean 'GoingUp хранит текущее направление
Это объявление переменной делает переменную GoingUp видимой для всех процедур событий формы. Я использовал переменную типа Boolean потому, что у нас в этой программе есть только два возможных направления перемещения - вверх и вниз.
Снова отобразите форму, дважды щелкните мышью на кнопке Переместить вниз, а затем введите в процедуре события Button2_Click следующий код программы:
GoingUp = False Timer1.Enabled = True
Эта процедура очень похожа на процедуру события Button1_Click, за исключением того, что она меняет направление на движение вниз.
Снова отобразите форму, дважды щелкните мышью на объекте Timer1, а затем введите в процедуре события Timer1_Tick следующий код программы:
If GoingUp = True Then 'перемещаем область вывода изображений вверх If PictureBox1.Top > 10 Then PictureBox1.Location = New Point _ (PictureBox1.Location.X - 10, _ PictureBox1.Location.Y - 10) End If Else 'перемещаем область вывода изображений вниз If PictureBox1.Top < (Me.Size.Height - 75) Then PictureBox1.Location = New Point _ (PictureBox1.Location.X + 10, _ PictureBox1.Location.Y + 10) End If End If
Как только таймер будет включен, эта структура выбора If...Then будет выполняться каждые 75 миллисекунд. Первая строка процедуры проверяет, установлена ли переменная GoingUp типа Boolean на значение True, указывающее, что значок перемещается вверх по форме. Если она установлена на True, процедура перемещает объект области вывода изображений на 10 пикселей ближе к левому краю и на 10 пикселей ближе к верхнему краю формы.
Если переменная GoingUp содержит значение False, структура выбора перемещает значок вниз. В этом случае объект области вывода изображений перемещается до тех пор, пока не будет достигнута граница формы. Высота формы может быть определена с помощью свойства Me.Size.Height. (Я вычитаю из высоты значение 75, так что значок не исчезает с формы за ее пределами.) Объект Me в этом примере представляет саму форму ( Form1 ).
Как вы увидите при запуске программы, это перемещение дает значку анимационный эффект плавного перемещения. Чтобы заставить его перемещаться быстрее, нужно уменьшить значение Interval для объекта таймера. Чтобы заставить значок двигаться медленнее, измените параметр Interval на большее значение.
Чтобы запустить программу, щелкните на кнопке Start (Начать). Программа Moving Icon запустится на выполнение в среде разработки.
Щелкните на кнопке Переместить вверх. Объект области вывода изображений переместится по диагонали вверх, как показано ниже.

Через некоторое время объект остановится около верхнего края формы.
Timer1_Tick использует переменную GoingUp для управления направлением перемещения немедленно, так что не имеет значения, когда область вывода изображений закончит движение в одном направлении. Подумайте об этом эффекте и представьте, как можно использовать аналогичную логику для создания игр на Visual Basic - увеличивать скорость анимации в соответствии с определенными условиями или "столкновениями" на экране, заставить анимированные объекты перемещаться в различных направлениях и т.п.В дополнение к свойствам Top и Left, в Visual Basic есть свойства Height и Width для большинства объектов формы. Вы можете использовать эти свойства для того, чтобы расширять или сжимать объекты при выполнении программы.
PictureBox, а затем рядом с верхним левым углом формы нарисуйте небольшой объект области вывода изображений.Установите для формы и области вывода изображений следующие свойства. Когда вы установите свойства для области вывода изображений, обратите внимание на текущие значения свойств Height и Width в свойстве Size. (Вы также можете установить их при разработке формы.)
| Объект | Свойство | Установка |
|---|---|---|
| PictureBox1 | Image | "c:\vbnet03sbs\Гл.16\earth.ico" |
| SizeMode | StretchImage | |
| Form1 | Text | Приближение к Земле |
PictureBox1 формы. В Редакторе кода появится процедура события PictureBox1_Click.Введите в процедуре события PictureBox1_Click следующий код программы:
PictureBox1.Height = PictureBox1.Height + 15 PictureBox1.Width = PictureBox1.Width + 15
Чтобы запустить программу, щелкните на кнопке Start (Начать).
В форме появляется значок с изображением Земли, показанный ниже.

Щелкните несколько раз на значке Земли, чтобы увеличить изображение. После 10 или 11 щелчков ваш экран должен выглядеть примерно так. 1

Интересуетесь одним из последних специальных эффектов? С помощью GDI+ вы можете сделать вещи, которые были сложными или невозможными в предыдущих версиях Visual Basic. Например, вы можете сделать форму практически прозрачной и видеть сквозь нее. Давайте предположим, что вы разрабатываете программу для показа фотографий, которая содержит отдельную форму, на которой расположены различные опции для манипулирования фотографиями. Вы можете сделать эту форму опций частично прозрачной, чтобы пользователь мог видеть всю область фотографии, при этом имея доступ к опциям.
В следующем упражнении показано, как изменять прозрачность формы. Это делается с помощью изменения значение свойства Opacity (Непрозрачность).
Button, а затем нарисуйте в форме две кнопки.Установите для формы и двух ее кнопок следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Button1 | Text | Установить непрозрачность |
| Button2 | Text | Восстановить |
| Form1 | Text | Прозрачная форма |
Введите в процедуре события Button1_Click следующий код программы:
Me.Opacity = 0.75
Непрозрачность задается в процентах, так что ее диапазон имеет границы от 0 до 1. Эта строка устанавливает Opacity формы Form1 (Me) на 75 %.
Снова отобразите форму, сделайте двойной щелчок мышью на кнопке Восстановить, а затем введите в процедуре события Button2_Click следующий код программы:
Me.Opacity = 1
Эта строка восстанавливает непрозрачность на значение 100 процентов.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Щелкните на кнопке Установить непрозрачность. Обратите внимание, что сквозь форму, показанную ниже, можно видеть.

| Чтобы | Сделайте следующее |
|---|---|
| Создать линии или фигуры | Используйте методы из пространства имен System.Drawing.Graphics. Например, следующие операторы программы рисуют на форме эллипс: Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Red) GraphicsFun.DrawEllipse(PenColor, 10, _ 120, 200, 160) |
| Создать линии или фигуры, которые сохраняются в форме при перерисовке окна | Поместите графические методы в процедуру события Paint формы. |
| Переместить объект по форме | Переместите объект с помощью свойства Location, ключевого слова New и структуры Point. Например: PictureBox1.Location = New Point(300, 200) Измените в процедуре события таймера свойства Left, Top или Location объекта. |
| Анимировать объект | Свойство Interval таймера управляет скоростью анимации. |
| Расширить или сжать объект во время выполнения программы | Измените свойства Height или Width объекта. |
| Изменить прозрачность формы | Измените свойство Opacity. |
В этой лекции вы узнаете, как:
System.Drawing для добавления графики в формы;Для многих разработчиков добавление в приложение графики и специальных эффектов является наиболее захватывающей и притягательной частью программирования. К счастью, создание впечатляющих и полезных графических эффектов с помощью Microsoft Visual Basic .NET очень просто и эффективно. В этой лекции вы узнаете, как добавлять в ваши программы интересные "фишки". Вы узнаете, как создавать красивые изображения, с помощью элементов управления PictureBox и Timer создавать простые эффекты анимации, и расширять или сжимать с помощью свойств Height и Width элементы управления во время выполнения программы. В итоге у вас будет достаточно знаний, чтобы создать полностью завершенный интерфейс пользователя.
Line и Shape. Область элементов Visual Basic .NET больше не предоставляет элементов управления для рисования. Вместо этого вы должны непосредственно использовать графические службы GDI+, доступные через пространство имен System.Drawing.Circle, Line и PSet заменены двумя методами: DrawEllipse и DrawLine и структурой Point, принадлежащими классу System.Drawing.Graphics.Move. Элементы управления Visual Basic .NET не имеют метода Move, но они могут быть быстро перемещены, если вы обновите одно из свойств элемента управления Left, Top или Location, или если вы используете метод SetBounds.DragDrop, свойства DragIcon и DragMode больше не доступны.System.Drawing.Imaging содержит функции для работы со следующими форматами изображений: BMP, В лекциях 2, 3 и 7 вы экспериментировали с добавлением в форму растровых изображений и значков с помощью объектов области вывода изображений. Теперь вы узнаете, как с помощью функций GDI+ из пространства имен System.Drawing, являющегося новым API (application programming interface - интерфейсом прикладного программирования ) для создания графики, в ваших формах создавать уникальные изображения. Создаваемые вами изображения могут добавить в ваши формы цвет, геометрические фигуры и текстуры, при этом использовать их очень легко.
Первое, что требуется изучить при работе с графикой - это координатную систему формы. В Visual Basic каждая форма имеет свою систему координат. Начальная точка системы координат находится в верхнем левом углу формы. Система координат по умолчанию состоит из строк и столбцов аппаратно-независимых графических элементов -пикселей. Они представляют собой наименьшие точки, которые вы можете использовать в форме Visual Basic.
В системе координат Visual Basic строки пикселей расположены вдоль оси x (горизонтальная ось), а столбцы пикселей располагаются вдоль оси y (вертикальная ось). Вы можете определить положение в системе координат, указав пересечение строки и столбца с помощью записи (x, y). Координаты (x, y) верхнего левого угла формы всегда равны (0, 0). На следующей иллюстрации показано, как описывается в системе координат Visual Basic расположение в форме объекта области вывода изображений.

Visual Basic общается с драйвером видеокарты вашего компьютера и с его помощью определяет, как в форме отображаются пиксели и различные фигуры (линии, прямоугольники, кривые и окружности). Для отображения конкретных фигур, таких, как линия, показанная на следующей иллюстрации, используется много пикселей. Логика, которая используется для отображения этого типа графики - не ваша забота, она выполняется графическим адаптером и процедурами рисования из графической библиотеки GDI+. На следующей иллюстрации показано увеличенное изображение искажений или ломаных краев, которые вы иногда можете видеть в приложениях Visual Basic и Windows.

Пространство имен System.Drawing включает многочисленные классы для создания графики. В этом разделе вы узнаете о классе System.Drawing.Graphics, который предоставляет методы и свойства для рисования геометрических фигур. О других классах вы можете узнать в справочной системе Visual Basic .NET.
Независимо от того, создаете ли вы простую фигуру или сложный чертеж, важно иметь возможность рисовать в ваших программах большую часть стандартных геометрических фигур. Следующая таблица содержит перечень базовых фигур и методов класса System.Drawing.Graphics.
| Фигура | Метод | Описание |
|---|---|---|
| Линия | DrawLine | Простая линия, построенная по двум точкам |
| Прямоугольник | DrawRectangle | Прямоугольник или квадрат с четырьмя точками |
| Дуга | DrawArc | Изогнутая линия с двумя точками (часть эллипса) |
| Окружность/эллипс | DrawEllipse | Округлая фигура, вписанная в прямоугольник. |
| Полигон, многоугольник | DrawPolygon | Сложная фигура с произвольным числом вершин и сторон (хранящихся в массиве) |
| Кривая | DrawCurve | Изогнутая линия, проходящая через произвольное количество точек (хранящихся в массиве); также называется фундаментальным сплайном |
| Кривые (сплайны) Безье | DrawBezier | Кривая, построенная с помощью четырех точек (точки номер 2 и 3 являются "управляющими" точками) |
В дополнение к приведенным здесь методам, которые создают пустые или "незаполненные" фигуры, существует несколько методов, которые рисуют фигуры, автоматически заполняемые каким-либо цветом. Эти методы обычно имеют префикс "Fill" (заполнить) и включают FillRectangle, FillEllipse и FillPolygon. Когда вы используете графический метод класса System.Drawing.Graphics, вы должны создать в вашем коде объект Graphics, представляющий этот класс, и либо объект Pen (перо), либо Brush (кисть), указывающий атрибуты фигуры, которую вы хотите нарисовать, такие, как толщина линии и цвет заливки. Объект Pen передается как один из аргументов в методы, которые не заполняют фигуру цветом. Объект Brush передается как аргумент, когда необходимо выполнить цветную заливку. Например, следующий вызов метода DrawLine для рисования линии, которая начинается с пикселя (20, 30) и заканчивается пикселем (100, 80), использует объект Pen и четыре целых значения. Объект Graphics объявляется с использованием имени GraphicsFun, а объект Pen объявляется с использованием имени PenColor.
Dim GraphicsFun As System.Drawing.Graphics Dim PenColor As New System.Drawing.Pen(System.Drawing.Color.Red) GraphicsFun = Me.CreateGraphics GraphicsFun.DrawLine(PenColor, 20, 30, 100, 80)
Синтаксис метода DrawLine важен, но обратите также внимание на предшествующие ему три строчки, которые требуются для использования класса System.Drawing.Graphics. Вы должны создать переменные для представления обоих объектов Graphics и Pen, и переменная Graphics должна быть создана с помощью метода CreateGraphics, принадлежащего форме Windows. Заметьте, что пространство имен System.Drawing.Graphics включается в ваш проект автоматически - вам не требуется включать в ваш код оператор Imports для объявления требуемого класса.
Если вы протестируете показанный выше метод DrawLine в программе, то заметите, что созданная линия сохраняется в форме только до тех пор, пока ее что-нибудь не закроет. Если в какой-то момент в форме появится диалоговое окно, которое закроет собой эту линию, то при его исчезновении линия больше не будет видна. Линия также исчезнет, если вы минимизируете окно формы, а затем снова его развернете. Чтобы устранить эту проблему, вы должны поместить ваш графический код в процедуру события Paint формы так, что каждый раз, при обновлении формы, графика также перерисовывалась.
В следующем упражнение вы с помощью процедуры события Paint формы создадите три фигуры. Нарисованные вами фигуры будут сохраняться в форме даже тогда, когда форма будет перекрываться другим окном или минимизироваться.
Form1_Paint формы код программы.Text формы Form1 на значение Рисование фигур.Form1.Paint.Form1_Paint. Это место, где вы должны ввести код программы, который должен исполняться при обновлении формы Visual Basic.Введите следующий код программы:
'Готовим переменную GraphicsFun для графических вызовов Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics 'Для рисования линии и эллипса используем перо красного цвета Dim PenColor As New System.Drawing.Pen(System.Drawing.Color.Red) GraphicsFun.DrawLine(PenColor, 20, 30, 100, 80) GraphicsFun.DrawEllipse(PenColor, 10, 120, 200, 160) 'Для создания заполненного прямоугольника используем кисть зеленого цвета Dim BrushColor As New SolidBrush(Color.Green) GraphicsFun.FillRectangle(BrushColor, 150, 10, 250, 100)
Этот пример процедуры события рисует три графические фигуры - красную линию, красный эллипс и заполненный зеленым цветом прямоугольник. Чтобы программирование графики стало доступно, процедура объявляет в коде переменную с именем GraphicsFun и использует метод CreateGraphics для активизации (или присвоения значения) этой переменной. Переменная PenColor типа System.Drawing.Pen используется для установки цвета рисования линии и эллипса, а переменная BrushColor типа SolidBrush используется для установки цвета заливки прямоугольника. Эти примеры являются только самой верхушкой айсберга графической библиотеки - существует множество различных фигур, цветов и их вариантов, которые можно использовать с помощью методов класса System.Drawing.Graphics.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Visual Basic загрузит форму и выполнит событие Paint этой формы. Ваша форма будет выглядеть примерно так.

Paint формы снова выполнится, и графические фигуры обновятся.Вывод растровых изображений и рисование фигур добавляет программе визуальную привлекательность, но для программистов королевой графических эффектов всегда была анимация. Анимация - это имитация движения, производимая быстрым отображением на экране серии связанных между собой изображений. Настоящая анимация требует программного перемещения объектов, и часто использует также изменение размера или формы изображения.
В этом разделе вы узнаете, как добавлять в ваши программы простую анимацию. Вы узнаете, как обновлять свойства Top и Left области вывода изображений, управлять скоростью анимации с помощью объекта таймера и обнаруживать границу окна вашей формы.
В Visual Basic 6 специальный метод с именем Move позволял перемещать объекты в системе координат. Метод Move больше не поддерживается элементами управления Visual Basic .NET; однако вместо него вы можете использовать следующие методы и свойства:
| Ключевое слово | Описание |
|---|---|
| Left | Это свойство может быть использовано для горизонтального перемещения объекта (влево или вправо). |
| Top | Это свойство может быть использовано для вертикального перемещения объекта (вверх или вниз). |
| Location | Это свойство может быть использовано для перемещения объекта в указанное место. |
| SetBounds | Этот метод устанавливает границы объекта, задавая его размер и положение. |
В следующем разделе обсуждается, как использовать для перемещения объектов свойства Left, Top и Location. Чтобы получить дополнительную информацию о методе SetBounds, найдите ключевое слово SetBounds в справочной системе Visual Basic.
Свойства Left и Top позволяют перемещать объект. Чтобы переместить объект в горизонтальном направлении, используйте свойство Left. Left имеет следующий синтаксис
объект.Left = по-горизонтали
где объект - это имя объекта формы, который вы хотите переместить, а по-горизонтали - это новая горизонтальная (по оси x) координата левого края объекта, измеренная в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в точку, расположенную в 300 пикселях справа от левого края окна:
PictureBox1.Left = 300
Чтобы переместить объект на относительное расстояние, вы должны добавлять или вычитать пиксели из текущего значения свойства Left. Например, чтобы переместить объект на 50 пикселей вправо, вы должны добавить к свойству Left значение 50, как показано здесь:
PictureBox1.Left = PictureBox1.Left + 50
Аналогично, вы можете изменить вертикальное положение объекта на форме, установив его свойство Top. Синтаксис свойства Top имеет вид
объект.Top = по-вертикали
где объект - это имя объекта формы, который нужно переместить, а по-вертикали - это новая вертикальная (по оси y) координата верхнего края объекта, измеренная в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в точку, расположенную в 150 пикселях ниже строки заголовка окна:
PictureBox1.Top = 150
Относительное перемещение вверх или вниз осуществляется с помощью добавления или вычитания пикселей из текущего значения свойства Top. Например, чтобы переместить объект на 30 пикселей вниз, нужно добавить к свойству Top значение 30, как показано здесь:
PictureBox1.Top = PictureBox1.Top + 30
Чтобы переместить объект одновременно в вертикальном и горизонтальном направлении, довольно просто использовать комбинацию значений свойств Left и Top. Например, чтобы переместить объект области вывода изображений в координаты (300, 200), можно ввести следующий код программы:
PictureBox1.Left = 300 PictureBox1.Top = 200
Однако разработчики Visual Basic .NET не рекомендуют использовать два оператора программы для перемещения объекта, если вы планируете делать много перемещений объектов программы (например, если во время сложного анимационного эффекта вы планируете перемещать объекты сотни или тысячи раз). Вместо этого Microsoft рекомендует использовать свойство Location, имеющее синтаксис
объект .Location = New Point(по-горизонтали, по-вертикали)
где объект - это имя объекта, по-горизонтали - это горизонтальная координата по оси x, по-вертикали - это вертикальная координата по оси y, а Point - это структура, определяющая положение верхнего левого угла объекта в пикселях. Например, следующий оператор программы перемещает объект области вывода изображений в координаты (300, 200):
PictureBox1.Location = New Point(300, 200)
Чтобы с помощью свойства Location выполнить относительное перемещение, требуются свойства Location.X и Location.Y. Например, оператор программы
PictureBox1.Location = New Point(PictureBox1.Location.X - 50, _ PictureBox1.Location.Y - 40)
перемещает объект области вывода изображений формы на 50 пикселей влево и на 40 пикселей вверх. Хотя эта конструкция кажется несколько громоздкой, она является рекомендуемым способом перемещения объектов вашей формы во время выполнения программы.
Фокус с созданием анимации в программе состоит в помещении в процедуру события таймера одного или нескольких изменений свойства Location. При этом через определенные интервалы времени таймер будет заставлять один или несколько объектов перемещаться по экрану. В лекции 7 вы узнали о том, как использовать объект таймера для обновления раз в секунду простой утилиты часов так, что она отображала правильное время. Когда вы создаете анимацию, вы устанавливаете свойство Interval таймера на ускоренное обновление - 1/5 секунды (200 миллисекунд), 1/10 секунды (100 миллисекунд) или меньше. Точная скорость зависит от того, на сколько быстро с вашей точки зрения должна выполняться анимация.
Еще один фокус состоит в использовании свойств Top и Left и размера формы для определения краев этой формы. Использование в процедуре события этих значений позволит вам останавливать анимацию (отключать таймер), когда объект достигает границы формы. Используя свойство Top, свойство Left, свойства, содержащие размер формы, и структуру выбора If...Then или Select Case, вы можете заставить объект отскакивать от одного или нескольких краев формы.
Следующее упражнение демонстрирует, как вы можете с помощью свойства Location и объекта таймера анимировать область вывода изображений, содержащую значок солнца (Sun.ico). В этом упражнении для обнаружения верхнего края формы вы будете использовать свойство Top, а для обнаружения нижнего края - свойство Size.Height. Значок солнца будет перемещаться вверх-вниз между этими двумя границами каждый раз, когда вы щелкаете на кнопке.
Button, нарисуйте в нижнем левом углу формы две кнопки.PictureBox, нарисуйте в нижнем правом углу формы небольшой прямоугольный объект области вывода изображений. Это объект программы, который вы будете анимировать.Timer, находящемся на закладке Windows Forms окна Toolbox (Область элементов), чтобы добавить его в область компонент, находящуюся ниже формы. Таймер будет управлять скоростью анимации. Вспомните, что таймер сам по себе не отображается на форме, так что он показывается под формой в области компонент, предназначенной для невидимых объектов.Установите для формы и объектов кнопки, области вывода изображений и таймера следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Button1 | Text | Переместить вверх |
| Button2 | Text | Переместить вниз |
| PictureBox1 | Image | c:\vbnet03sbs\Гл.16\sun.ico |
| SizeMode | StretchImage | |
| Timer1 | Enabled | False |
| Interval | 75 | |
| Form1 | Text | Простая анимация |
Когда вы установите эти свойства, ваша форма будет выглядеть примерно так, как показано на рисунке ниже.

Button1_Click.Введите следующий код программы:
GoingUp = True Timer1.Enabled = True
Эта простая процедура события устанавливает переменную GoingUp на значение True и включает объект таймера. Реальный код программы для перемещения объекта области вывода изображений и определения правильного направления находится в процедуре события Timer1_Tick.
Прокрутите программный код формы в самый верх и под тегом "Windows Form Designer generated code" ("Код, автоматически созданный конструктором форм Windows") введите следующее объявление переменной:
Dim GoingUp As Boolean 'GoingUp хранит текущее направление
Это объявление переменной делает переменную GoingUp видимой для всех процедур событий формы. Я использовал переменную типа Boolean потому, что у нас в этой программе есть только два возможных направления перемещения - вверх и вниз.
Снова отобразите форму, дважды щелкните мышью на кнопке Переместить вниз, а затем введите в процедуре события Button2_Click следующий код программы:
GoingUp = False Timer1.Enabled = True
Эта процедура очень похожа на процедуру события Button1_Click, за исключением того, что она меняет направление на движение вниз.
Снова отобразите форму, дважды щелкните мышью на объекте Timer1, а затем введите в процедуре события Timer1_Tick следующий код программы:
If GoingUp = True Then 'перемещаем область вывода изображений вверх If PictureBox1.Top > 10 Then PictureBox1.Location = New Point _ (PictureBox1.Location.X - 10, _ PictureBox1.Location.Y - 10) End If Else 'перемещаем область вывода изображений вниз If PictureBox1.Top < (Me.Size.Height - 75) Then PictureBox1.Location = New Point _ (PictureBox1.Location.X + 10, _ PictureBox1.Location.Y + 10) End If End If
Как только таймер будет включен, эта структура выбора If...Then будет выполняться каждые 75 миллисекунд. Первая строка процедуры проверяет, установлена ли переменная GoingUp типа Boolean на значение True, указывающее, что значок перемещается вверх по форме. Если она установлена на True, процедура перемещает объект области вывода изображений на 10 пикселей ближе к левому краю и на 10 пикселей ближе к верхнему краю формы.
Если переменная GoingUp содержит значение False, структура выбора перемещает значок вниз. В этом случае объект области вывода изображений перемещается до тех пор, пока не будет достигнута граница формы. Высота формы может быть определена с помощью свойства Me.Size.Height. (Я вычитаю из высоты значение 75, так что значок не исчезает с формы за ее пределами.) Объект Me в этом примере представляет саму форму ( Form1 ).
Как вы увидите при запуске программы, это перемещение дает значку анимационный эффект плавного перемещения. Чтобы заставить его перемещаться быстрее, нужно уменьшить значение Interval для объекта таймера. Чтобы заставить значок двигаться медленнее, измените параметр Interval на большее значение.
Чтобы запустить программу, щелкните на кнопке Start (Начать). Программа Moving Icon запустится на выполнение в среде разработки.
Щелкните на кнопке Переместить вверх. Объект области вывода изображений переместится по диагонали вверх, как показано ниже.

Через некоторое время объект остановится около верхнего края формы.
Timer1_Tick использует переменную GoingUp для управления направлением перемещения немедленно, так что не имеет значения, когда область вывода изображений закончит движение в одном направлении. Подумайте об этом эффекте и представьте, как можно использовать аналогичную логику для создания игр на Visual Basic - увеличивать скорость анимации в соответствии с определенными условиями или "столкновениями" на экране, заставить анимированные объекты перемещаться в различных направлениях и т.п.В дополнение к свойствам Top и Left, в Visual Basic есть свойства Height и Width для большинства объектов формы. Вы можете использовать эти свойства для того, чтобы расширять или сжимать объекты при выполнении программы.
PictureBox, а затем рядом с верхним левым углом формы нарисуйте небольшой объект области вывода изображений.Установите для формы и области вывода изображений следующие свойства. Когда вы установите свойства для области вывода изображений, обратите внимание на текущие значения свойств Height и Width в свойстве Size. (Вы также можете установить их при разработке формы.)
| Объект | Свойство | Установка |
|---|---|---|
| PictureBox1 | Image | "c:\vbnet03sbs\Гл.16\earth.ico" |
| SizeMode | StretchImage | |
| Form1 | Text | Приближение к Земле |
PictureBox1 формы. В Редакторе кода появится процедура события PictureBox1_Click.Введите в процедуре события PictureBox1_Click следующий код программы:
PictureBox1.Height = PictureBox1.Height + 15 PictureBox1.Width = PictureBox1.Width + 15
Чтобы запустить программу, щелкните на кнопке Start (Начать).
В форме появляется значок с изображением Земли, показанный ниже.

Щелкните несколько раз на значке Земли, чтобы увеличить изображение. После 10 или 11 щелчков ваш экран должен выглядеть примерно так. 1

Интересуетесь одним из последних специальных эффектов? С помощью GDI+ вы можете сделать вещи, которые были сложными или невозможными в предыдущих версиях Visual Basic. Например, вы можете сделать форму практически прозрачной и видеть сквозь нее. Давайте предположим, что вы разрабатываете программу для показа фотографий, которая содержит отдельную форму, на которой расположены различные опции для манипулирования фотографиями. Вы можете сделать эту форму опций частично прозрачной, чтобы пользователь мог видеть всю область фотографии, при этом имея доступ к опциям.
В следующем упражнении показано, как изменять прозрачность формы. Это делается с помощью изменения значение свойства Opacity (Непрозрачность).
Button, а затем нарисуйте в форме две кнопки.Установите для формы и двух ее кнопок следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Button1 | Text | Установить непрозрачность |
| Button2 | Text | Восстановить |
| Form1 | Text | Прозрачная форма |
Введите в процедуре события Button1_Click следующий код программы:
Me.Opacity = 0.75
Непрозрачность задается в процентах, так что ее диапазон имеет границы от 0 до 1. Эта строка устанавливает Opacity формы Form1 (Me) на 75 %.
Снова отобразите форму, сделайте двойной щелчок мышью на кнопке Восстановить, а затем введите в процедуре события Button2_Click следующий код программы:
Me.Opacity = 1
Эта строка восстанавливает непрозрачность на значение 100 процентов.
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Щелкните на кнопке Установить непрозрачность. Обратите внимание, что сквозь форму, показанную ниже, можно видеть.

| Чтобы | Сделайте следующее |
|---|---|
| Создать линии или фигуры | Используйте методы из пространства имен System.Drawing.Graphics. Например, следующие операторы программы рисуют на форме эллипс: Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Red) GraphicsFun.DrawEllipse(PenColor, 10, _ 120, 200, 160) |
| Создать линии или фигуры, которые сохраняются в форме при перерисовке окна | Поместите графические методы в процедуру события Paint формы. |
| Переместить объект по форме | Переместите объект с помощью свойства Location, ключевого слова New и структуры Point. Например: PictureBox1.Location = New Point(300, 200) Измените в процедуре события таймера свойства Left, Top или Location объекта. |
| Анимировать объект | Свойство Interval таймера управляет скоростью анимации. |
| Расширить или сжать объект во время выполнения программы | Измените свойства Height или Width объекта. |
| Изменить прозрачность формы | Измените свойство Opacity. |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.