Автор книги: Евгений Матвеев
Жанр: Прочая образовательная литература, Наука и Образование
Возрастные ограничения: +12
сообщить о неприемлемом содержимом
Текущая страница: 5 (всего у книги 18 страниц) [доступный отрывок для чтения: 6 страниц]
7.3. Составные типы данных
Комбинируя простые типы данных Visual Basic, программист может создавать собственные составные типы. Это бывает необходимо, если информация подвергается группировке по какому-то признаку.
[{Private|Public}] Type имя_составного_типа_данных
имя_элемента [(индексы)] As тип
End Type
Например, можно объявить составной тип данных Book для создания удобного электронного каталога книг вашей собственной библиотеки.
Элементы типа данных Book будут описывать характеристики книг: автор, название, год выпуска, город, издательство, количество страниц, наличие иллюстраций:
Type Book
Author As String
Title As String
Year As Date
City As String
PublishHouse As String
Pages As Integer
Illustrations As Boolean
End Type
Можно добавить и другие характеристики книг, и даже добавить другие типы объектов (журнал, газета, CD-диск и т. п.). Попробуйте это сделать самостоятельно.
Как научиться пользоваться простыми и составными типами данных, вы узнаете далее в этой главе при описании переменных и массивов.
7.4. Константы
Константа представляет собой именованную ячейку памяти компьютера, предназначенную для хранения неизменных данных. Чтобы в программе использовать константу, нужно ее объявить и присвоить нужное значение при помощи инструкции Const:
[{Public|Private}] Const имя_константы [As тип] = выражение
Одно из необязательных ключевых слов Public (Общий) или Private (Частный) может использоваться для указания диапазона видимости (Scope) константы – на уровне всей программы или только текущего модуля. Инструкция Const является сокращением от Constant (Константа) и указывает на объявление константы.
Ключевое слово As (Как) вводится при объявлении типа данных. Чаще всего, явно указывать тип данных константы нет необходимости, так как его автоматически определит Visual Basic, вычислив значение выражения.
При выборе имени константы, как и любых других имен, нужно руководствоваться следующими правилами:
• имя должно начинаться с буквы,
• допустимыми символами являются буквы, цифры и символ подчеркивания «_»,
• длина имени не должна превышать 255 символов,
• имя не должно совпадать с другим именем данного программного модуля или зарезервированным словом Visual Basic, например, MsgBox.
Например, если в программе требуется число π (Пи), то лучше один раз объявить константу PI:
Const PI = 3.14159
Далее в программе можно использовать константу PI в любых выражениях, вроде:
MsgBox PI +3
В ходе вычисления значения выражения PI +3, Visual Basic подставит реальное значение константы PI и прибавит к нему число три. После этого, функция MsgBox выведет на экран окно сообщения с результатом:
6.14159
Кроме констант, объявляемых программистом, существует еще множество встроенных констант Visual Basic, список которых можно просмотреть в Object Browser (Просмотр объектов).
Запустите Object Browser (Просмотр объектов) с помощью команды меню View – Object Browser (Вид – Просмотр объектов) или нажав на клавишу [F2] (Рис.7.5).
Рис.7.5. Object Browser (Просмотр объектов)
Выберите в левом списке Classes (Классы) название нужного класса констант. После этого в правом списке отобразится полный перечень констант, входящих в этот класс.
Щелкните мышью на нужной константе. В нижней части Object Browser (Просмотр объектов) отобразится ее описание.
При необходимости использования имени константы нажмите кнопку Copy to Clipboard (Копировать в буфер обмена), а затем вставьте его в нужном месте текста программы.
7.5. Переменные
Переменная, как и константа, является именованной ячейкой памяти, хранящей данные определенного типа. Но, в отличие от константы, данные могут не только считываться из переменной, но и записываться в нее.
Переменными по своей сути можно назвать свойства любого объекта Windows. Однако, свойства неразрывно связаны со своими объектами, а переменные существуют независимо от них.
Объявление переменной может быть явным или неявным. Явное объявление производится с помощью инструкции Dim:
Dim имя_переменной [As тип] [, …]
Инструкция Dim представляет собой сокращение от Dimension (Размерность) и указывает на начало объявления переменной. Одна инструкция Dim позволяет объявить несколько переменных, перечисленных запятыми.
Ключевое слово As (Как) определяет тип размещаемых в ней данных. Если он не указывается, то Visual Basic по умолчанию использует тип Variant (Варьируемый):
Dim Result1
В отличие от констант, переменные можно использовать в тексте программ безо всякого предварительного объявления, что иначе называется неявным объявлением переменной. По умолчанию им задается тип Variant (Варьируемый).
Например, следующие две строчки кода заносят результат сложения чисел 2+2 в переменную Result1, а функция MsgBox выводит на экран итог:
Result1 = 2+2
MsgBox Result1
Однако делать это нежелательно из-за возникающей неопределенности с использованием имени переменной в нескольких процедурах. Дело в том, что неявно объявленная переменная сохраняет свое значение только в пределах одной процедуры, а извне ее это значение будет обнуляться.
Чтобы при неявном объявлении переменной Visual Basic по умолчанию не задавал им тип Variant (Варьируемый), можно использовать специальные инструкции, которые размещаются в разделе глобальных объявлений модуля:
DefBool диапазонБукв [, диапазонБукв]…
DefByte диапазонБукв [, диапазонБукв]…
DefInt диапазонБукв [, диапазонБукв]…
DefLng диапазонБукв [, диапазонБукв]…
DefCur диапазонБукв [, диапазонБукв]…
DefSng диапазонБукв [, диапазонБукв]…
DefDbl диапазонБукв [, диапазонБукв]…
DefDate диапазонБукв [, диапазонБукв]…
DefStr диапазонБукв [, диапазонБукв]…
DefObj диапазонБукв [, диапазонБукв]…
DefVar диапазонБукв [, диапазонБукв]…
Обязательный аргумент диапазонБукв имеет следующий синтаксис:
буква1 [-буква2]
Аргументы буква1 и буква2 указывают диапазон имен, для которых задается тип данных по умолчанию. Каждый аргумент представляет первую букву имени переменной, причем регистр символов не имеет значения.
Так, чтобы Visual Basic всем неявно объявленным переменным, начинающихся с букв «a», «b» или «c», задавал тип Boolean (Логический), нужно использовать следующую инструкцию:
DefBool a-c
Теперь приведем в качестве примера несколько явно объявленных переменных с указанными типами данных:
Dim bolYesNo As Boolean
Dim intDig1 As Integer
Dim curDollars As Currency
Dim strWelcome As String
Для указания одного из наиболее распространенных типов данных при объявлении переменных и констант, вместо ключевого слова As (Как) можно воспользоваться одним из специальных символов (Рис.7.6).
Рис.7.6. Символы объявления типов данных
констант и переменных языка Visual Basic
Символы объявления типа дописываются после имени переменой при первом ее упоминании в программе:
Result1% = 2 +2
Dim intDig1%
Dim curDollars@
Dim strWelcome$
Вновь объявленным переменным Visual Basic по умолчанию устанавливает нулевые или пустые значения, в зависимости от их типа. Тем не менее, переменным лучше присвоить начальные значения явным образом до первого их использования в программе, чтобы уменьшить число возможных ошибок вследствие использования переменных с неопределенным значением:
bolYesNo = True
intDig1 = 100
curDollars = 500
strWelcome = «Добро пожаловать!»
Кроме какого-то конкретного числового или строкового значения, переменная может содержать специальное значение, определяемое ключевым словом Visual Basic:
• Empty (Пустое) – переменной типа Variant (Варьируемый) не присвоено начального значения, в числовом контексте она представляется как ноль, а в строковом контексте – как пустая строка,
• Null (Фиктивное) – указывает, что переменная не содержит допустимого значения, которое может храниться в переменной конкретного типа.
Переменные с составными типами данных объявляются аналогично обычным переменным. Например, создадим переменную Book1 с объявленным ранее типом данных Book:
Dim Book1 As Book
Присвоение начального значения элементам составной переменной осуществляется аналогично свойствам объектов:
Book.Author «Матвеев Евгений Евгеньевич»
Book. Title «Visual Basic для новичков. Шаг за шагом»
Book. Year = 2016
Book.City = «Екатеринбург»
Book. PublishHouse = «Издательские решения»
Book.Pages = 438
Book.Illustrations = True
7.6. Массивы переменных
Массив (Array) представляет собой структуру для хранения множества переменных одинакового типа. Использование массивов облегчает составление программ, обрабатывающих однотипные данные. Массивы объявляются аналогично соответствующим переменным:
Dim имя_массива (индексы) [As тип] [, …]
После имени массива в круглых скобках указывается список индексов (Index), определяющих диапазон порядковых номеров элементов массива для каждой размерности (Dimension). Чтобы было понятнее, нужно разъяснить значения обоих терминов.
Индексом (Index) называется целое число или выражение, указывающее номер элемента массива. Размерность (Dimension) определяет число индексов, требуемых для указания элемента массива.
Для определения индексов используется следующий синтаксис:
[нижний To] верхний [, …]
Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base (Нижний параметр), которая используется в разделе общих объявлений текущего модуля. При отсутствии Option Base (Нижний параметр), по умолчанию нижняя граница массива равняется нулю.
Ключевое слово As (Как) указывает тип данных элементов массива. Если тип не указан, то используется универсальный тип Variant (Варьируемый).
В зависимости от числа размерностей, массивы подразделяются на:
• одномерные,
• многомерные.
Простой пример объявления одномерного массива из десяти элементов типа Integer (Целый):
Dim MyArray (9) As Integer
Так как нумерация индексов по умолчанию начинается не с единицы, а нуля, размер массива будет на единицу больше числа 9.
Для получения доступа к одному из элементов массива, используется его имя с указанием в скобках индекса (Index) нужного элемента, например:
MyArray (2) = 1000
Print MyArray (2)
Для групповой автоматизированной обработки одномерных массивов удобно пользоваться конструкцией For Each…Next языка Visual Basic, которая позволяет выполнять одинаковый набор операций для каждого элемента массива.
Например, чтобы поочередно вывести на экран значения всех элементов массива MyArray, нужно написать следующий цикл:
Dim ArrItem As Variant
For Each ArrItem In MyArray
Print ArrItem
Next
Многомерный массив, как и одномерный, содержит несколько переменных одинакового типа. Но ячейки многомерного массива располагаются не в одном, а в двух или более измерениях. Пример объявления трехмерного массива, в котором содержится 500 ячеек (10 * 10 * 5):
Dim intArray (9,9,4) As Integer
А теперь приведем пример использования одной из ячеек объявленного ранее трехмерного массива:
intArray (3,2,0) = 1000
Print intArray (3,2,0)
Обработка многомерных массивов, как правило, осуществляется с помощью вложенных циклов For…Next, которые более удобны для прохода каждой ячейки массива. Например, объявим двухмерный массив из 12-ти (3*4) строковых элементов, а затем заполним этот массив путем ввода текстовой строки в каждую ячейку с помощью клавиатуры:
Dim strMessages (2,3) As String
For i = 0 To 2
For j = 0 To 3
strMessages (i,j) = InputBox («Введите ячейку:» & i & «,» & j)
Next j
Next i
Здесь мы видим два цикла For…Next, один из которых является вложенным. Внешний цикл, в котором используется переменная i в качестве счетчика, обеспечивает проход массива в одном измерении, а цикл с переменной j – в другом.
Чтобы не запутаться при вводе текстовых строк, в подсказке функции InputBox указываются номера текущих позиций в обоих измерениях, которые хранятся в переменных i и j. В данном случае, цикл будет повторяться до тех пор, пока не будет пройден весь массив.
7.7. Динамические массивы
Выше приводились примеры объявлений статических массивов (Static Array), размер которых был известен программисту заранее.
Но если в процессе разработки программы невозможно предугадать размер массива, тогда используется динамический массив (Dynamic Array).
Сначала динамический массив должен быть формально описан с помощью инструкции Dim с пустыми скобками, то есть без указания индексов размерностей:
Dim имя_массива () [As тип] [, …]
Пример объявления динамического массива:
Dim DynArr () As Variant
Чтобы динамический массив был виден за пределами подпрограммы, в которой он создается, нужно его объявить в разделе общих объявлений данного модуля.
В дальнейшем, на уровне процедуры можно пользоваться инструкцией ReDim для фактического создания и последующего изменения числа размерностей динамического массива, которое может производиться многократно:
ReDim [Preserve] имя_массива (индексы) [As тип] [, …]
Ключевое слово Preserve (Сохранить) указывает на необходимость сохранения данных в существующем массиве при изменении значения его последней размерности.
Вот так будет выглядеть объявление в программе динамического массива DynArr:
ReDim DynArr (100) As Integer
Другая возможность создания динамического массива заключается в использовании встроенной функции Array (Массив), возвращающую значение типа Variant (Варьируемый), содержащее массив.
Синтаксис данной функции следующий:
Array ([СписокЭлементов])
Список элементов представляет собой разделенный запятыми список значений, присваиваемых элементам массива, другими словами – его заполнение.
Если список не указываются, создается пустой массив имеющий нулевую длину, то есть не имеющий ни одного элемента в своём составе.
В следующем примере инструкция Dim объявляет переменную массива DynArr2 типа Variant (Варьируемый), а затем с помощью функции Array (Массив) присваиваются значения трем его элементам:
Dim DynArr2 As Variant
DynArr2 = Array (10,20,30)
При автоматизированной обработке динамических массивов вам очень пригодятся встроенные функции LBound (Нижняя граница) и UBound (Верхняя граница), возвращающие значения нижнего и верхнего предела указанной размерности массива соответственно:
LBound (имяМассива [, размерность])
UBound (имяМассива [, размерность])
Если размерность не указана, то функции возвращают номер индекса первой его размерности.
Например, вышеупомянутый массив DynArr2 имеет только одну размерность. Функция LBound (Нижняя граница) возвратит значение 0, а UBound (Верхняя граница) возвратит 2. Пример использования этих функций:
Dim i As Integer
For i = LBound (DynArr2, 1) To UBound (DynArr2, 1)
Print DynArr2 (i)
Next
Здесь производится вывод на экран текущих значений элементов массива DynArr2, которая производится в цикле For…Next, с использованием функций LBound (Нижняя граница) и UBound (Верхняя граница).
Независимо от числа элементов первой размерности массива цикл будет работать корректно, распечатывая его содержимое на экране.
7.8. Массивы объектов
Visual Basic позволяет создавать не только массивы переменных, но и массивы объектов (Control Array). Такие массивы облегчают программирование однотипных элементов управления.
Чтобы разобраться с массивами объектов, лучше всего сделать это на практике. Воспользуемся для этого созданной нами программой.
Щелчком мыши выделите кнопку Приветствие и с помощью кнопки Copy (Копировать) панели инструментов скопируйте ее в буфер обмена.
Затем нажмите кнопку Paste (Вставить). На экране появится диалог с сообщением: You already have a control named «cmdHello’. Do you want to create a control array? (У вас уже есть элемент управления с именем «cmdHello’. Вы хотите создать массив объектов?).
Выберите кнопку Yes (Да), подтверждая создание массива объектов. Visual Basic вставит на форму вторую кнопку с именем cmdHello.
Эти кнопки будут отличаться только значением свойства Index (Индекс). У новой кнопки он станет равным 1, а у старой – 0. Теперь, чтобы изменять значения свойств этих кнопок в коде программы, после имени объекта нужно указывать в скобках его индекс, например:
cmdHello (1).Enabled = False
А как же различить процедуры обработки событий для разных элементов управления, относящихся к одному массиву? Для этого нужно в скобках после процедуры обработки события добавить аргумент Index As Integer, например:
Private Sub cmdHello_Click (Index As Integer)
MsgBox «Привет, мир!»
End Sub
Теперь внутри процедуры можно определить, какая из кнопок нажата:
Private Sub cmdHello_Click (Index As Integer)
Select Case Index
Case 0
MsgBox «Нажата кнопка с индексом 0»
Case 1
MsgBox «Нажата кнопка с индексом 1»
End Select
End Sub
Массивы объектов, также, могут быть динамическими, если заранее не известно количество элементов управления, составляющих массив.
Для работы с динамическими массивами объектов используются специализированные инструкции языка Visual Basic, что их отличает от обычных массивов:
Load (Загрузить) – создает элемент управления без отображения на экране, только загружая его в память компьютера,
Unload (Выгрузить) – удаляет элемент управления, выгружая его из памяти.
Теперь приведём пример создания второго элемента управления Label (Надпись) с помощью инструкции Load (Загрузить):
Dim ObjNum As Integer ‘ объявление переменной
ObjNum = ObjNum +1 ‘ увеличение ее значения на единицу
Load Label1 (ObjNum) ‘ создание объекта Label (Надпись)
Label1(ObjNum).Visible = True ‘ отображение на экране
Label1(ObjNum).Top = Label1(ObjNum-1).Top ‘ размещение на форме
Label1 (ObjNum).Left = Label1 (ObjNum-1).Left + Label1 (ObjNum-1).Width
Удаление данного элемента управления производится инструкцией Unload (Выгрузить):
Unload Label1 (ObjNum)
7.9. Диапазон видимости переменных и констант
В Visual Basic имеется такое понятие, как диапазон видимости (Scope) переменных и констант, определяющее их доступность для других процедур. Существует три диапазона видимости и соответствующие им :
• уровень процедуры – локальные переменные,
• личный уровень модуля – модульные переменные,
• общий уровень модуля – глобальные переменные.
Диапазон видимости переменной определяется при ее объявлении. Переменная, определенная внутри процедуры, может использоваться только там.
Приведем пример процедуры LocalVariable, где создается строковая переменная strMsg и ей присваивается значение:
Sub LocalVariable ()
Dim strMsg As String
strMsg = «Эта переменная используется внутри процедуры»
MsgBox strMsg
End Sub
В другой процедуре – OutsideScope – выдается окно сообщения, выводящее на экран содержимое переменной strMsg:
Sub OutsideScope ()
MsgBox strMsg
End Sub
Это окно сообщения останется пустым, так как переменная strMsg является локальной в процедуре LocalVariable, а в OutsideScope создается одноименная переменная, не содержащая никакого значения.
Локальные переменные создаются при входе в процедуру и уничтожаются при выходе из нее. Когда возникает необходимость в сохранении значений локальных переменных между вызовами процедуры, тогда они объявляются как статические переменные. Тогда вместо ключевого слова Dim используется Static, например:
Static strWelcome As String
Чтобы сделать статическими все переменные процедуры, нужно указать ключевое слово Static при объявлении этой процедуры.
Для создания переменной, видимой во всех процедурах данного модуля, инструкция описания должна находиться в разделе Declarations (Объявления). Можно использовать ключевое слово Dim или Private, например:
Dim strWelcome As String
Private strWelcome As String
Если же переменная должна использоваться и в других программных модулях проекта, она также должна быть объявлена в разделе Declarations (Объявления), но вместо Dim нужно использовать ключевое слово Public, например:
Public strWelcome As String
Диапазон видимости констант определяется аналогичным образом.
Глава 8. Формы
В этой главе вы научитесь:
• разбираться в основных характеристиках объектов Windows,
• использовать в своих программах формы,
• применять их свойства, методы и события.
8.1. Понятие об объектах
Прежде чем говорить о конкретных элементах управления, рассмотрим основные характеристики объектов операционной системы Windows, которые используются и в Visual Basic. Любой объект обладает строго определенным набором параметров:
• свойств (Properties),
• событий (Events),
• методов (Methods).
Каждое свойство (Property) описывает одну из характеристик объекта. Например, свойство BackColor (Цвет фона) указывает номер цветового оттенка, используемый Windows для заполнения фона объекта. Другие свойства могут содержать его размеры, видимый на экране текст, определять доступность объекта и т. д. Чтобы изменить характеристики объекта, следует изменить значения его свойств.
Наличие у конкретного объекта тех или иных свойств зависит выполняемых им функций. Некоторые свойства присущи всем без исключения объектам, однако, большинство свойств встречаются только у некоторых из них.
Событие (Event) – это действие, распознаваемое объектом, например, щелчок мыши на его поверхности, запускающее процедуру обработки события. Инициировать события может пользователь, операционная система или другая программа. Процедуры обработки событий пишутся программистом и определяют реакцию приложения на данное событие.
Как же происходит выполнение написанной процедуры обработки события? Воспользуемся для пояснения примером из главы 2. Если пользователь щелкает мышью на кнопке cmdHello с надписью Приветствие, Windows генерирует событие Click (Щелчок), вызывая процедуру cmdHello_Click, которая выводит диалог с сообщением (Рис. 2.18). Если же процедура обработки события отсутствует, то просто ничего не происходит.
Метод (Method) представляет собой подпрограмму, выполняющее допустимое действие над данным объектом. Например, выделение кнопки Приветствие с использованием метода SetFocus (Установить фокус) выглядит так:
cmdHello.SetFocus
Чтобы рассмотрение характеристик объектов не казалось слишком абстрактным, можно в качестве примера рассмотреть некоторые из параметров такого объекта, как обычный автомобиль (Рис.8.1).
Рис.8.1. Параметры объекта «Автомобиль»
Все элементы управления Visual Basic являются объектами Windows, поэтому каждый из них, также, обладает своим набором свойств, событий и методов.
Объекты одинакового типа объединяются в классы (Classes). Например, все формы относятся к классу Form.
Правообладателям!
Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.Читателям!
Оплатили, но не знаете что делать дальше?