Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПиОА_1 семестр_1 / ПОСОБИЕ_VB.Net

.pdf
Скачиваний:
658
Добавлен:
06.03.2016
Размер:
3.4 Mб
Скачать

Окончание табл. 6.5

 

Удаляет из строки заданное количество символов kol,

 

начиная с заданной позиции poz, например:

Remove

St = "Привет всем Ура"

(poz,kol)

St = St.Remove(7, 5)

 

Результат: Переменная St содержит строку

 

"Привет Ура"

 

 

 

Разбивает строку по заданному разделителю, превращая

 

ее в массив подстрок, например:

 

Dim Ms(4) As String

Split

Dim St As String

Ms = St.Split(";")

(разделитель)

 

Результат: Строковый массив Ms содержит элементы,

 

соответствующие символам строки St, разделенных «;».

 

Элементов в массиве Ms будет на единицу больше,

 

чем ;».

 

 

 

Удаляет все символы из набора, заданного в виде масси-

Trim

ва символов Unicode, в начале и конце строки, например:

Dim St As String = " Изучаем строки.!!"

(набор

TextBox1.Text = st.Trim(" ", ".", "!")

символов)

Если набор символов не задан, то удаляются только про-

 

 

белы

 

 

ToCharArray

Копирует символы строки в символьный массив

 

 

7.2. Практическая часть. Обработка строковых данных

Анализ строк

Задача 7.1. Определить количество символов в заданной строке

Фрагмент программного кода:

Dim S As String = "ABCDE" Dim n As byte

n = S.length ' n примет значение 5

Задача 7.2. Подсчитать, количество слов в заданной строке.

Фрагмент программного кода:

88

S = S.Trim k = 1

For i = 0 To S.Length - 2 If (S.Chars(i) = " ") And _

(S.Chars(i + 1) <> " ") Then k += 1

Next i

Задание 7.3. Найти количество цифр в заданной строке символов.

Фрагмент программного кода:

k = 0

For i = 0 To S.Length - 1

If (S.Chars(i) >= "0") And _ (S.Chars(i) <= "9") Then k += 1

Next i

Задание 7.4. Определить есть ли в строке одинаковые символы.

Фрагмент программного кода с использованием свойства Chars и метода IndexOf класса String для нахождения позиции первого вхождения очередного символа в строке:

T = False

For i = 0 To S.Length - 1

'Проверка: первое условие есть ли в строке выделенный символ,

'второе условие позиция найденного символа не должна

'равняться номеру i проверяемого символа

If s.IndexOf(s.Chars(i)) >= 0 And _ s.IndexOf(s.Chars(i)) <> i Then

T = True

Exit For ' Досрочный выход из цикла

End If

Next i

If T Then TextBox3.Text = "Есть"

Else TextBox3.Text = "Нет"

Задание 7.5. Вывести все гласные буквы латинского алфавита заданной строки

89

Фрагмент программного кода:

For i = 0 To St.Length – 1

a = St.Chars(i)

Select Case a

Case "A", "E", "I", "O", "U", "Y"

TextBox2.Text &= a & " "

Case "a", "e", "i", "o", "u", "y"

TextBox2.Text &= a & " "

End Select

Next i

Изменение строк (замена, удаление, вставка символов)

Задание 7.6. Получить новую строку S1, заменив в строке S все строчные русские буквы на прописные.

Прописная русская буква в кодировочной таблице имеет код меньший, чем соответствующая ей строчная, на 32.

Фрагмент программного кода с использованием метода Chars:

S1 = ""

For i = 0 To S.Length – 1

a = S.Chars(i)

Select Case a

Case "а" To "я"

S1 &= Chr(Asc(a) - 32)

Case Else

S1 &= a

End Select

Next i

Задание 7.7. Получить новую строку S1 из строки S такую, чтобы между словами был только один пробел. Вывести сообщение о количестве удаленных пробелов.

Фрагмент программного кода:

S1 = ""

For i = 0 To s.Length - 2

a = S.Chars(i) 'Выделение символа из строки S If a <> " " Then

'Переписывание символа в строку S1, если он не пробел

90

S1 &= a

Else

'Добавление одного пробела в строку S1, 'если следующий символ в строке S не пробел

If S.Chars(i + 1) <> " " Then S1 &= " "

End If

Next i

'Переписывание последнего символа в строку S1

S1 &= S.Chars(S.Length -1)

k = S.Length – S1.Length 'Количество удаленных пробелов

Задание 7.8. В заданной строке S заменить все слова «всегда» на «часто».

Фрагмент программного кода:

S = S.Replace("Всегда", "Часто")

S = S.Replace("всегда", "часто")

Задание 7.9. Из заданной строки выделить подстроку, начиная с позиции 2 длиной 6 символов.

Фрагмент программного кода:

Dim Sta As String = "Изучение строк"

Dim Stb As String

Stb = Sta.Substring(1, 6)

Задание 7.10. Преобразовать заданную строку St в массив символов.

Фрагмент программного кода:

Dim S As String = "abcdefghijklmnop" Dim a As Char() = St.ToCharArray

'Массив a будет состоять из символов, каждый из которых представляет один символ из строки S.

Задание 7.11. Преобразовать заданную строку S в массив слов.

Фрагмент программного кода:

Dim m() As String Dim s As String Dim i, k As Byte s = TextBox1.Text

91

k = 0

'Цикл для поиска количества слов в строке S (по пробелам)

For i = 0 To s.Length - 1

If s.Chars(i) = " " Then k += 1

Next i

'Выделение памяти под массив по количеству слов в строке S

ReDim m(k)

'Выделение слов из строки S по разделителю и передача их в массив m m = S.Split(" ")

For i = 0 To k

TextBox2.Text &= m(i)& Chr(13) & Chr(10)

Next i

7.3. Контрольные вопросы и задания

1.Как описываются переменные символьного типа?

2.Что означает ""?

3.Как описываются строковые переменные?

4.Как задается строковая константа?

5.Что общего между строкой и символьным массивом?

6.Какие операции применимы к строковым переменным и константам?

7.Приведите примеры использования методов и свойств класса

String.

8.Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов.

9.В строке заменить все двоеточия (:) точкой с запятой (;). Подсчитать количество замен.

10.Определить, сколько раз в строке встречается заданное слово.

11.В строке между словами вставить вместо пробела запятую и пробел.

92

8.ФАЙЛЫ

Взависимости от организационной структуры хранения информации в файле и способа доступа к этой информации принято выде-

лять три типа файлов: текстовые, типизированные, нетипизирован-

ные. Далее рассматриваются только текстовые файлы.

8.1. Пространство имен System.IO

Для унификации механизма обработки данных, не зависящего от их источника, в .NET Framework введено понятие потока Stream. Был разработан абстрактный класс Stream, выполняющий обобщенные операции с данными, поступающими с клавиатуры, из памяти, из файла или сетевого соединения.

Класс Stream и его производные относятся к пространству имен System.IO.

Классы StreamReader (его методы представлены в табл. 7.1) и StreamWriter (его методы представлены в таблице 7.2) являются производными от класса Stream и предоставляют операции чтения и записи текстовыx файлам последовательного доступа.

 

 

 

Таблица 8.1. Методы класса StreamReader

 

 

 

 

 

Метод

 

Описание

 

Peek

Возвращает следующий символ в потоке без смещения указате-

 

ля текущей позиции (Символ конца файла равен -1)

 

 

 

 

 

 

 

 

 

Читает один символ из входного потока. Перегруженная версия

 

Read

читает в символьный массив определенное количество симво-

 

 

лов, начиная с заданной позиции

 

 

 

 

 

 

 

Читает символы до комбинации Chr(13) & Chr(10) и воз-

 

ReadLine

вращает их в виде строкового значения. Если текущая позиция

 

 

находится в конце файла, метод возвращает Nothing

 

 

 

 

 

 

 

Читает все символы от текущей позиции до конца потока и воз-

 

ReadToEnd

вращает их в виде одной строки (метод особенно удобен при

 

 

 

работе с небольшими файлами)

 

 

 

 

Close

Закрывает существующий поток и освобождает все системные

 

 

ресурсы, связанные с ним

 

 

 

 

 

 

 

 

93

 

 

 

Таблица 8.2. Методы класса StreamWriter

 

 

 

 

 

 

 

 

Метод

 

 

 

Описание

 

 

Write

 

Перегруженные версии метода позволяют записывать в поток

 

любые базовые типы данных в текстовом формате

 

 

 

 

 

 

 

 

 

 

 

Перегруженные версии метода позволяют записывать в поток

 

WriteLine

любые базовые типы данных в текстовом формате, за которы-

 

 

ми записывается комбинация Chr(13) &

Chr(10)

 

 

 

 

 

 

 

Close

 

Закрывает существующий поток и освобождает все системные

 

 

ресурсы, связанные с ним

 

 

 

 

 

 

 

 

 

 

 

 

 

Класс File позволяет создавать, открывать, удалять и

 

переименовывать файлы. Методы

этого класса

представлены

 

в табл. 7.3

 

 

 

 

 

 

 

 

 

 

Таблица 8.3. Методы класса File

 

 

 

 

 

 

 

 

 

Метод

 

Действие

 

File.Move("a.txt","b.txt")

 

Переименовывает существующий

 

 

текстовый файл a.txt в b.txt

 

 

 

 

 

 

 

File.Delete("a.txt")

 

Удаляет существующий файл

 

 

a.txt.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

File.CreateText("a.txt")

 

Cоздает новый текстовый файл

 

 

a.txt и разрешает запись в него

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Открывает (или создает, если его

 

File.AppendText("a.txt")

 

нет) текстовый файл a.txt и раз-

 

 

решает дозапись в конец текстового

 

 

 

 

 

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

File.OpenText("a.txt")

 

Открывает текстовый файл a.txt

 

 

для чтения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание. Перед использование пространства имен System.IO его следует импортировать с помощью оператора Imports.

8.2.Элементы управления группы Dialogs для работы с файлами

Всреде Visual Studio можно организовать работу со стандартными диалоговыми окнами Windows, которые облегчат выбор нужного файла. Для открытия стандартного диалогового окна Windows

«Открыть» в VB.Net используется элемент управления

94

OpenFileDialog группы Dialogs, а для открытия диалогового окна «Сохранить» – элемент управления SaveFileDialog.

Основные свойства элементов управления OpenFileDialog

и SaveFileDialog:

Свойство

Описание

В этом свойстве хранится имя файла, выбранного с помощью FileName диалогового окна

Позволяет задать шаблон имен открываемых файлов в окне редактора фильтров. Можно одновременно определить несколько Filter фильтров. Используется для ограничения списка видимых фай-

лов

Фрагмент программного кода для открытия файла с помощью стандартного диалогового окна Windows «Открыть»:

OpenFileDialog1.Filter="Text files (*.txt)|*.txt " OpenFileDialog1.ShowDialog()

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

Name_f = OpenFileDialog1.FileName

Dim R As StreamReader = File.OpenText(Name_f)

End If

Примечание. Метод ShowDialog() вызывает появление диалогового окна Windows для выбора файла.

Фрагмент программного кода для сохранения файла с помощью диалогового окна Windows «Сохранить»:

SaveFileDialog1.Filter= "Text files (*.txt)|*.txt"

If SaveFileDialog1.ShowDialog() = DialogResult.OK Then

Name_f = SaveFileDialog1.FileName

Dim W As StreamWriter = File.CreateText(Name_f)

End If

8.3.Практическая часть. Файлы

Вследующих примерах имя файла задается в программном коде. Однако в этих примерах имя файла можно задавать с помощью

стандартных диалоговых окон «Открыть» и «Сохранить», так как было показано выше.

95

Задача 8.1. Создать новый текстового файла test.txt и записать в него поток данных, заданный в компоненте TextBox1.

Фрагмент программного кода:

' Подключение пространства имен ввода/вывода

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click

'Создание потока символов W для записи в новый текстовый файл

Dim W As StreamWriter = File.CreateText("test.txt")

'Запись в поток W текстовых данных из текстового поля по строкам

W.WriteLine(TextBox1.Text) W.Close() 'Закрытие потока

End Sub

End Class

Задача 8.2. Организовать дозапись в конец текстового файла test.txt потока данных, заданного в компоненте TextBox1.

Фрагмент программного кода:

' Подключение пространства имен ввода/вывода

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click

'Создание потока символов W для дозаписи в существующий текстовый файл

Dim W As StreamWriter = File.AppendText("test.txt")

'Запись в поток W текстовых данных из текстового поля по строкам

W.WriteLine(TextBox1.Text) W.Close()'Закрытие потока

End Sub

End Class

Задача 8.3. Организовать чтение потока данных по строкам из текстового файла и вывод его в текстовое поле TextBox1.

Фрагмент программного кода:

96

' Подключение пространства имен ввода/вывода

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click

'Создание потока символов R, предназначенного для чтения данных из

'текстового файла

Dim R As StreamReader = File.OpenText("test.txt") Dim st As String

TextBox1.Text=''''

Do

St = R.ReadLine ' Чтение в поток R строки из текстового файла

TextBox1.Text &= St & Chr(13) & Chr(10)

Loop Until R.Peek = -1 ' До тех пор пока не достигнут конец файла R.Close()'Закрытие потока

End Sub

End Class

Задача 8.4. Организовать запись в текстовый файл количества строк, количества столбцов и элементов двумерного массива из текстовых полей TextBox.

Фрагмент программного кода:

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click SaveFileDialog1.Filter = "Text files (*.txt)|*.txt"

If SaveFileDialog1.ShowDialog() = DialogResult.OK Then

Dim W As StreamWriter = _

File.CreateText(SaveFileDialog1.FileName)

' Запись в поток количества строк и количества столбцов

W.WriteLine(TextBox1.Text): W.WriteLine(TextBox2.Text)

'Запись в поток элементов двумерного массива

W.WriteLine(TextBox3.Text) '

W.Close()'Закрытие потока

End If

End Sub

End Class

97

Результат работы:

Задание исходных данных на форме

Полученный текстовый

файл, открытый в блокноте

 

 

 

 

 

 

 

TextBox1

 

 

 

 

TextBox2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TextBox3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задача 8.5. Организовать запись в текстовый файл количества строк (n), количества столбцов (m) и элементов двумерного массива a(i, j) из памяти компьютера (созданного ранее, например, заполненного случайными числами).

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click Dim n, m As Int32

SaveFileDialog1.Filter = "Text files (*.txt)|*.txt"

If SaveFileDialog1.ShowDialog() = DialogResult.OK Then

Dim W As StreamWriter = _ File.CreateText(SaveFileDialog1.FileName)

n = a.GetLength(0) : m = a.GetLength(1)

'Запись в поток количества строк и столбцов

W.WriteLine(n): W.WriteLine(m)

'Запись в поток элементов двумерного массива из памяти компьютера

For i As Int32 = 0 To n - 1

For j As Int32 = 0 To m - 1

W.Write(a(i, j) & " ")

Next j

W.WriteLine()

Next i

W.Close()

End If

End Sub

End Class

98

Задача 8.6. Организовать чтение количества строк, количества столбцов и элементов двумерного массива arr из текстового файла.

Фрагмент программного кода:

Imports System.IO

Public Class Form1

Private Sub Button1_Click(…) Handles Button1.Click

Dim i, j, n, m As Byte Dim arr(,) As Int32 Dim matr() As String

OpenFileDialog1.Filter = "Text files (*.txt)|*.txt" If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

'Создание потока символов R, предназначенного для чтения данных из

'текстового файла

Dim R As StreamReader = _

File.OpenText(OpenFileDialog1.FileName)

'Считывание из файла количества строк и столбцов n = Convert.ToByte(R.ReadLine)

m = Convert.ToByte(R.ReadLine)

ReDim arr(n - 1, m - 1): ReDim matr(m -1)

'Чтение в поток матрицы

For i = 0 To n-1

matr = R.ReadLine.Split() For j = 0 To m - 1

arr(i, j) = Convert.ToInt32(matr(j))

Next j

Next i

R.Close()

End If

End Sub

End Class

Пояснение. Метод Split разбивает строку по разделителю пробел, превращая ее в массив подстрок matr, который затем конвертируется в числовой массив a.

99

Результат работы:

Заданный текстовый файл,

Прочитанный двумерный массив

открытый в блокноте

 

8.4. Контрольные вопросы и задания

1.Какое понятие введено в .NET Framework для унификации механизма обработки данных, не зависящего от их источника?

2.Для каких целей предназначен класс Stream?

3.К какому пространству имен относится класс Stream и его производные?

4.Какие классы предоставляют операции чтения и записи текстовыx файлов последовательного доступа?

5.Какие операции позволяет осуществлять с файлами класс File?

6.Как можно извлечь информацию из файла?

7.Как можно проверить достигнут ли конец файла?

8.Как организовать работу с файлами с помощью стандартных диалоговых окон Windows?

9.Назовите основные свойства элементов управления

OpenFileDialog и SaveFileDialog?

10.Какой метод вызывает появление диалогового окна для выбора файла?

11.Обязательно ли закрывать файл после его использования?

12.Создайте проект для обработки строк. Заданная строка, содержащая английский текст, считывается из текстового файла. Из этого текста удалить часть символьной строки, заключенной в скобки (вместе со скобками) и найти количество слов, начинающихся с буквы a. Результат работы записать в другой текстовый файл.

100

9. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ VB.NET

Для создания графических объектов в VB.Net созданы классы графического ядра GDI+ , которые содержатся в пространствах имен:

-System.Drawing – базовые классы GDI+ для двумерной графики;

-System.Drawing.Drawing2D – классы для выполнения более сложных графических операций (наложения, градиентных заливок);

-System. Drawing.Text – классы для работы с текстом,

-System.Drawing.Imaging – классы для работы с форматами изображений: bmp, gif, jpeg, tiff и др.

Просмотреть пространство имен и всех свойств и методов нужного класса можно с помощью специального окна просмотра Object Browser, которое вызывается командой меню среды View Object Browser (рис. 9.1).

б

а

а) Пространство имен

б) Методы и свойства класса

System.Drawing

Brush

Рис. 9.1 Окно просмотра объектов

9.1. Создание объекта Graphics

Поверхностью для рисования является экземпляр класса Graphics пространства имен Drawing, поэтому перед началом ри-

101

сования необходимо создать этот экземпляр. Далее, выбрав соответствующий метод, на созданной поверхности можно нарисовать нужную геометрическую фигуру.

Экземпляр класса Graphics можно создать с помощью метода CreateGraphics, применяемого к самой форме:

Dim Graph As Graphics = Form1.CreateGraphics

или к элементу управления на ней (PictureBox):

Dim Graph As Graphics = PictureBox1.CreateGraphics

Здесь Graph – созданная поверхность.

Каждая форма и каждый элемент управления обладают своей системой координат. По умолчанию начало отсчета находится в левом верхнем углу объекта. Ось X направлена вправо, ось Y – вниз

(см. рис. 9.2).

Рис. 9.2 Система координат формы

Точка O на форме имеет координаты: a – количество пикселей от левого края формы до точки O; b – количество пикселей от верхнего края формы до точки O.

После создания поверхности для рисования (экземпляра класса Graphics) нужно выбрать инструмент, например, виртуальные перо (Pen) или кисть (Brush) и обратиться к соответствующему методу для рисования фигуры. Инструменты создаются с помощью конструктора.

Например, в следующем примере на форме с помощью пера красного цвета будет нарисован прямоугольник (рис. 9.3):

102

'Cоздание поверхности G для рисования

Dim G As Graphics = Form1.CreateGraphics

'Cоздание пера, красного цвета толщиной три пикселя

Dim P1 As Pen = New Pen(Color.Red, 3)

'Обращение к методу DrawRectangle, который по заданным 'координатам рисует прямоугольник красного цвета.

G.DrawRectangle(P1,70,50,150,100)

Метод DrawRectangle имеет пять параметров:

1.

New

Обращение к конструктору, который создает

Pen(Color.Red,3)

перо красного цвета и толщиной 3 пикселя

 

 

 

 

 

 

 

 

 

2.

70

 

 

Горизонтальная

координата

левой

верхней

 

 

вершины прямоугольника

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.

50

 

 

Вертикальная

координата

левой

верхней

 

 

вершины прямоугольника

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.

150

 

 

Ширина прямоугольника

 

 

 

 

 

 

 

 

 

 

5.

100

 

 

Высота прямоугольника

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 9.3. Изображение прямоугольника на форме

Если протестировать приведенный выше пример, то можно заметить, что нарисованный на форме прямоугольник существует до тех пор, пока окно формы активно.

При переходе в другое окно данного или любого другого приложения или, если окно формы будет минимизировано, а затем снова развернуто, то нарисованный процедурой Button1_Click прямоугольник исчезнет.

103

Чтобы этого не происходило, программный код создания графического объекта можно поместить в процедуру события Paint формы, которое можно выбирать из списка событий при нажатии на зна-

чок Events в окне Properties (рис. 9.4). В этом случае графика будет перерисовываться на форме при ее создании и при каждом ее обновлении.

Рис. 9.4 Событие Paint, создающее процедуру обработки события Paint для формы

В следующем примере программный код помещен в процедуру события Paint. В этом случае нарисованный объект на форме не исчезает при манипуляциях с окном формы:

Private Sub Form1_Paint()

Dim G As Graphics = Form1.CreateGraphics

Dim P1 As Pen = New Pen(Color.Blue, 3)

G. DrawRectangle (P1, 70, 50, 150, 100)

End Sub

9.2. Конструкторы и методы

Для создания инструмента используют конструкторы. Конст- руктор – это процедура (подпрограмма), содержащая параметры в виде исходных данных, необходимых для выполнения объектом запрограммированных действий.

Исходные данные определяются разработчиком. Параметры конструктора указываются в скобках сразу за именем класса. Например:

104

New Pen (Color.Red, 3).

Наличие оператора New означает, что создается объект. Имя Pen говорит о том, что создается объект Перо, т.е. объект, с помощью которого выполняется рисование, в скобках указываются свойства пера – Color.Red (цвет – красный), 3 (толщина пера).

Конструктор не возвращает никакого значения. Его главное на-

значение – определение исходных данных создаваемого объекта.

Ниже приведен фрагмент программного кода, использующего разные конструкторы для рисования прямоугольника, изображенного на рис. 9.5.

Dim G As Graphics = Form1.CreateGraphics

'Конструктор для задания координат левого верхнего угла прямоугольника

Dim pt As New Point(70, 50)

'Конструктор для задания размеров прямоугольника: высоты и ширины

Dim sz As New Size(150, 100)

'Конструктор для прямоугольника

Dim rct As New Rectangle(pt, sz)

'Конструктор для пера

Dim pn As Pen = New Pen(Color.Red, 3) G.DrawRectangle(pn,rctние прям) 'Рисова оугольника

Примечание. Конструктор New создает объекты pt, sz, rct, pn, а метод Graphics.DrawRectangle рисует прямоугольник, используя созданные объекты.

Класс Pen (перо) позволяет задавать цвет и ширину линии. Экземпляр данного класса создается с помощью конструктора

Dim pn As Pen = New Pen(Color.Red, 3)

Класс SolidBrush используется для заливки изображения однородным цветом. Ниже приведены коды, создающие закрашенный прямоугольник и эллипс (рис. 9.5):

'Рисуется прямоугольник и закрашивается красным цветом

G.Graphics.FillRectangle _

(New SolidBrush(Color.Red), 10, 10, 100, 100)

105

'Рисуется зллипс и закрашивается зеленым цветом

Dim brush As New SolidBrush(Color.Green)

Dim rect As New Rectangle(130, 10, 100, 100)

G.FillEllipse(brush, rect)

Как видно из этого примера, создание заливки немногим отличается от рисования. Вместо метода Draw... используется метод Fill..., а вместо пера Реn создается кисть SolidBrush.

Красный

 

 

 

Зеленый

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 9.5 Прямоугольник и эллипс, нарисованные кистью со сплошной заливкой

Класс Color определяет цвет создаваемого объекта. Экземпляр этого класса – обязательный параметр при создании любых рисунков. Свойство Color определяет цвет линий при создании экземпляра класса Реn или, используя метод FromArgb, создает необходимую палитру при заливке объекта.

Чтобы создать экземпляр класса Color, необходимо объявить переменную типа Color и присвоить ей соответствующее значение свойства Color. Эти свойства имеют имена, являющиеся названием системных цветов OC Windows (рис. 9.6).

Dim col As Color col = Color.Black

106

Рис. 9.6 Название системных цветов OC Windows

Задать цвет можно также с помощью палитры, которую создает метод FromArgb.

Dim col As Color ={Color.FromArgb(10,255,100,120)}

Параметр Alpha (он задается первым) – обозначает прозрачность, это целое число в диапазоне от 0 до 255, чем меньше число, тем прозрачнее цвет.

Цвет получается смешением трех основных цветов: Red (красного), Green (зеленого) и Blue (синего), интенсивность цвета задается целым числом в диапазоне от 0 до 255, чем больше число, тем больше данной краски используется для получения состава нужного цвета.

Примечание. Если для палитры указано только три параметра, то они относятся к цвету, прозрачность по умолчанию равна 255, т.е. ее просто нет.

Фрагментный код рисующий два эллипса – один с заливкой зеленым цветом, второй залит палитрой, полученной смешением цветов

(рис. 9.7):

' Создает на PictureBox1 поверхность Graph для рисования:

Dim Graph As Graphics = PictureBox1.CreateGraphics

Dim brush As New SolidBrush(Color.Green) Dim brush1 As New SolidBrush _

(Color.FromArgb(100, 255, 200)) Dim rect As New Rectangle(10, 10, 100, 100) Dim rect1 As New Rectangle(130, 10, 100, 100)

Graph.FillEllipse(brush, rect)

Graph.FillEllipse(brush1, rect1)

107