ПиОА_1 семестр_1 / ПОСОБИЕ_VB.Net
.pdf
Окончание табл. 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
