logo search
лекцииИТвМенеджменте -аудитория

Условный оператор if

Для проверки одного условия и выполнения оператора или блока операторов используется оператор IF…THEN. Этот оператор можно использовать с разным синтаксисом: однострочным (линейным) и многострочным (блочным).

а) Однострочный:

If условие Then операторы1 [Else операторы2]

б) Блочный:

If условие Then

блок операторов1

[Else

блок операторов2]

End If

Рис. 58. Пример решения задачи с использованием блочного оператора IF.

в) Для проверки более одного условия и выполнения одного из нескольких блоков операторов используется оператор вида:

If условие 1 Then

блок операторов 1

ElseIf условие 2 Then

блок операторов 2

……………

ElseIf условие n Then

блок операторов n

[Else

блок операторов Else]

End If

Пример:

Public Function Obr_Err (Err_Num As Integer) _

As Integer

Dim Txt As String

If Err_Num=6 Then

Txt=”переполнение” : Obr_Err=2

ElseIf Err_Num=11 Then

Txt=”деление на нуль” : Obr_Err=2

Else

Txt=”нераспознанная ошибка”&Err_Num : Obr_Err=3

EndIf

Err.Clear

MsgBox Txt, VbOkOnly, “Ошибки выполнения”

End Function

Функция IIF

IIF (условие, значение1, значение2)

Эта функция возвращает значение1, если условие истинно и значение2, если условие ложно.

В качестве условия можно использовать логическое выражение, возвращающее значение True (Истина) или False (Ложь), или любое арифметическое выражение (нулевое значение эквивалентно False, а ненулевое – True).

Оператор выбора SELECT CASE

Используется для проверки одного условия и выполнения одного из нескольких блоков операторов.

Формат записи оператора:

Select Case проверяемое выражение

Case список выражений 1

операторы 1

Case список выражений 2

операторы 2

Case список выражений 3

операторы 3

……………………………….

Case Else

операторы группы Else

End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа (логическое, числовое, строковое).

Список выражений – одно или несколько выражений, разделенных стандартным символом –разделителем(;).

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

Например, Is >= 10

Рис.60. Пример решения задачи с использованием оператора Select Case

Методы Print и Cls

Метод Print применяется для вывода данных в форму или на принтер. Для вывода на принтер используется метод Printer.Print, а для вывода в текущую форму достаточно просто написать Print.

Метод Cls убирает с формы весь текст, выведенный ранее. Если его не вызвать, после нескольких вызовов Print текст исчезает под нижним краем формы.

Программирование циклов

В VISAUL BASIC существуют три циклические конструкции операторов:

  1. For … Next

  2. While … Wend

  3. Do … Loop

Оператор цикла For … Next

Оператор цикла For…Next имеет формат:

For счетчик = начало To конец [Step приращение]

операторы

Next [счетчик]

Рассмотрим пример решения задачи, использующей цикл со счетчиком. Требуется найти сумму 10 чисел.

Private Sub Command1_Click()

Dim b(10) As Integer, s As Integer

s = 0

For i = 1 To 10

b(i) = Val(InputBox("Введите число"))

s = s + b(i)

Next

Print s

End Sub

Оператор цикла WHILE…WEND

Используется для организации циклов с предусловием и имеет следующий формат:

While условие продолжения цикла

операторы тела цикла

Wend

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

Private Sub Command1_Click()

Dim y As Single

y = InputBox("Введите число")

While y > 1

'MsgBox y

Print y

y = y / 2

Wend

End Sub

Оператор цикла DO…LOOP

Используется для организации циклов с неопределенным числом повторений (с предусловием и с постусловием).

Этот оператор для организации цикла с предусловием может использоваться в двух модификациях:

а) Do While условие продолжения цикла

операторы тела цикла

Loop

б) Do Until условие прекращения цикла

операторы тела цикла

Loop

Для организации цикла с постусловием этот оператор также может быть использован в двух модификациях:

в) Do

операторы тела цикла

Loop While условие продолжения цикла

г) Do

операторы тела цикла

Loop Until условие прекращения цикла

На рис. 61 приведен пример использования цикла с постусловием для решения задачи сортировки одномерного массива по возрастанию элементов.

Рис. 61. Пример использования цикла с постусловием

Модульный принцип построения проекта и программного кода.

В языке VISAUL BASIC создание Windows-приложения - это почти то же самое, что и создание проекта. Проект - это совокупность экранных форм и программных кодов, с помощью которых решается некоторая задача.

Windows-приложение - это исполняемый exe-файл.

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

  1. Метод модульной организации.

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

В файле модуля формы (frm) содержится программный код, относящий к форме и объектам этой формы.

В стандартном (универсальном) модуле (bas) содержатся программные коды, которые могут использоваться не в одной, а в нескольких формах (и даже в нескольких проектах).

VISAUL BASIC позволяет создавать новые объекты, разрабатывать для них свойства и методы и описывать их в модулях класса (cls).

  1. Метод функциональной декомпозиции (метод).

Суть метода “top-down” – программный модуль логически разбивается на отдельные процедуры (функции). Процедура (функция) скрывает выполняемую последовательность действий и действует как единая абстрактная операция.

Принятая в VISAUL BASIC классификация процедур показана на рис.62.

Процедуры

Подпрограммы Функции

(SUB) (FUNCTION)

Процедуры Общие

обработки событий процедуры

(Event) (General)

Рис.62. Классификация процедур

Общие процедуры.

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

Общая процедура может входить в состав модуля экранной формы (в файл frm) или в состав стандартного модуля (в файл bas). Поэтому существуют две возможности размещения общей процедуры.

1) Размещение процедуры в файле экранной формы

Код процедуры может быть добавлен двумя способами.

Способ 1. Код процедуры может быть записан в окне программного кода для данной экранной формы.

Рис. 63. Добавление общей процедуры первым способом

Способ 2. Процедура может быть добавлена в модуль командой меню Tools - Add Procedure

Рис. 64. Добавление общей процедуры вторым способом

2) Размещение процедуры в файле стандартного модуля.

Процедура должна определяться в окне программного кода для стандартного модуля. Если стандартного модуля в проекте нет, то его необходимо добавить (создать стандартный модуль) командой меню Project - Add Module.

Добавить общую процедуру в стандартном модуле можно указанными выше способами.

Область определения и время жизни переменных

В VISAUL BASIC есть три вида областей определения, характеризующих доступность переменной:

Локальные переменные

Локальными называются переменные, определяемые внутри процедуры или функции. Они доступны только внутри этой процедуры.

Так как локальная переменная A (см. рис. 65) объявляется оператором Dim в соответствующей процедуре, она доступна внутри только этой процедуры. Поэтому не возникает конфликтов при использовании разными процедурами переменных с одним и тем же именем.

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

Переменные контейнера

Переменные контейнера определяются в секции (General) (Declarations) с помощью оператора Dim и доступны только внутри соответствующего контейнера, т.е. формы, модуля или класса (см. рис. 66).

Form Module

Р ис. 65. Область определения локальных переменных

Form Module

Р ис. 66. Область определения переменных контейнера

Глобальные переменные

Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется Public. Глобальные переменные доступны во всех модулях и процедурах проекта (см. рис.67).

Л окально объявленные переменные при выходе из процедуры удаляются из памяти, а при новом вызове процедуры инициализируются заново. Их содержимое при этом не сохраняется, что не всегда желательно. Этого можно избежать путем расширения области определения, т.е. объявив переменную глобальной или, как минимум переменной контейнера. Но это разрешает доступ к переменной из других процедур.

Form Module

Рис. 67. Область определения глобальных переменных

VISAUL BASIC дает возможность объявлять переменные как статические. При выходе из процедуры содержимое статической переменной сохраняется. При новом вызове этой процедуры переменной присваивается значение, которое она имела при последнем выходе из этой процедуры. Содержимое переменной сохраняется в течение всего времени, пока существует в памяти форма или модуль.

Объявление переменной как статической:

Static Имя_переменной [As Тип_переменной]

Пример:

Private Sub Command1_Click()

Static a As Integer

Dim b As Integer

a=a+1

b=b+1

Print a

Print b

End Sub

Статическая переменная a при каждом щелчке на кнопке Command1 увеличивается на 1. Нестатическая переменная b при каждом щелчке инициализируется заново, поэтому ее значение при выходе всегда равно 1.

Чтобы объявить статическими все локальные переменные процедуры, следует записать ключевое слово Static в заголовке процедуры.

Полное описание общей процедуры:

[ОбластьВидимости] [Static] Sub имяПроцедуры (СписокПараметров)

Операторы

End Sub

Область видимости - это одно из двух ключевых слов Public или Private. Они устанавливают, к какому классу принадлежит процедура: к классу локальных или классу глобальных процедур. Процедура является локальной (Private), если она доступна (видна) только внутри данного модуля и не может быть вызвана из других модулей. Процедура является глобальной (Public), если она доступна (видна) из других модулей.

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

Примечание: Чтобы объявить статическими только некоторые переменные, достаточно при описании переменных вместо ключевого слова Dim использовать Static.

Передача параметров в процедуры

В процедурах событий набор параметров зависит от события и не может быть изменен разработчиком.

В общих процедурах количество и порядок используемых параметров определяется разработчиком. В заголовке процедуры можно указывать тип данных для параметров.

В VISAUL BASIC параметры могут передаваться двумя способами:

- либо как ссылки (ByRef)

- либо как значение (ByVal)

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

По умолчанию параметры в VISAUL BASIC передаются по ссылке, но можно указывать явно ключевое слово ByRef перед параметром в заголовке процедуры:

Sub pr1(ByRef n As String)

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

Function fkl(ByVal k As String) As Boolean

VISUAL BASIC позволяет использовать в процедурах именованные параметры и создавать процедуры, в списке которых могут присутствовать необязательные параметры.

Именованные параметры

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

При вызове процедуры следует именовать параметры:

имя параметра:=значение

Пример:

Private Sub Summa(a,b,c)

c=a+b

End Sub

Private Sub Command1_Click()

Summac:=S,b:=val(Text1.Text),a:=val(Text2.Text)

Text3.Text=Str(S)

End Sub

При вызове процедуры можно передавать как неименованные, так и именованные параметры. Однако, при этом как только в списке появился именованный параметр, то все следующие за ним параметры также должны быть именованными.

Необязательные параметры

Необязательным является параметр, значение которого может не задаваться при вызове процедуры. Для того чтобы параметр стал необязательным, перед его именем ставится ключевое слово Optional. Все последующие параметры после первого необязательного параметра также должны быть необязательными.

Пример:

Sub Pr(a, Optional b)

If IsMissing(b) Then

Print a,b

Else

Print a

EndIf

End Sub

Private Sub Command1_Click()

Pr 1

Pr 1,2

End Sub

Примечание: В примере показаны два варианта вызова процедуры Pr. В процедуре Pr функция IsMissing проверяет передан или нет аргумент типа Variant.

Массивы статические и динамические.

Массив - это набор элементов определенного типа, каждый из которых имеет свой порядковый номер, называемый индексом. Различают массивы статические и динамические.

Границы статического массива устанавливаются на этапе разработки и могут изменяться только в новой версии программы.

Динамические массивы изменяют свои границы в ходе выполнения программы.

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

[Static| Public| Dim] Имя_массива([Нижн_предел To] Верхн_предел) [As Тип_данных]

Динамический массив создается в два этапа. Сначала массив определяют в секции (General) (Declarations) контейнера (Form, Module) без указания размера. Затем с помощью оператора ReDim устанавливают фактический размер массива:

Синтаксис оператора ReDim:

ReDim [Preserve] Имя_массива(Границы) [As Тип_данных]

В отличие от Dim оператор ReDim используется только в процедурах. При этом тип данных указывать не обязательно, особенно если он уже определен оператором Dim. Использование ключевого слова Preserve позволяет сохранить содержимое массива при изменении его размерности (однако, для многомерных массивов можно изменять только последнее измерение).

Пример:

'(General) (Declarations)

Dim a() As Variant

Private Sub Command1_Click()

ReDim Preserve a(5,10)

. . . . . . .

End Sub

Область видимости динамических массивов (контейнерных, глобальных) определяется способом их объявления:

Public – глобальный;

Dim - контейнерный.

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

Lbound(массив, размерность) - нижняя граница.

Ubound(массив, размерность) - верхняя граница.

Пример ввода данных в динамический массив:

Dim ms() As String

Private Sub Command1_Click()

Cls

ReDim ms(0)

s = "Начало работы"

Do Until s = ""

s = InputBox("введите фамилию")

ms(UBound(ms)) = s

ReDim Preserve ms(UBound(ms) + 1)

Loop

ReDim Preserve ms(UBound(ms) - 1)

For i = 0 To UBound(ms)

Print i; " "; ms(i)

Next i

End Sub

VISUAL BASIC позволяет использовать массив в качестве передаваемого в процедуру параметра и в качестве возвращаемого функцией значения.

Пример передачи массива в качестве параметра массива:

Public Sub srt(b() As Integer)

Dim i As Integer, f As Integer, k As Integer

Do

f = 0

For i = LBound(b) To UBound(b) - 1

If b(i) > b(i + 1) Then

k = b(i): b(i) = b(i + 1): b(i + 1) = k: f = 1

End If

Next

Loop While f = 1

End Sub

Private Sub Command1_Click()

Dim a(1 To 5) As Integer

Dim i As Integer

For i = 1 To 5

a(i) = Val(InputBox("Введите число"))

Next

Call srt(a)

Cls

For i = 1 To 5

Print a(i);

Next

End Sub

Пример функции, возвращающей массив:

Public Function VV(ByVal n As Byte) As Byte()

Dim x(1 To n) As Byte, i As Byte

For i = 1 To n

x(i) = Val(InputBox("Введите число"))

Next

VV=x

End Function

Private Sub Commnd1_Click()

Dim b() As Byte, i As Byte

B()=VV(10) ‘вызов функции

For i = 1 To 10

Print b(i)

Next

End Sub

Файлы

Информация хранится на разнообразных носителях в файлах. Процесс работы с файлами состоит из нескольких этапов:

получение дескриптора файла;

открытие файла;

чтение или запись файла;

закрытие файла.

Дескриптор файла

Для связи системы или приложения с файлом имеется канал ввода/вывода. При открытии файлу ставится в соответствие канал с определенным номером. Допустимо использование номеров 1- 511. Каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Следовательно, для ввода и вывода данных в файл имеет значение не имя файла, а номер канала. Операционная система должна иметь сведения о наличии свободных каналов, которые можно использовать для открытия файлов.

VISAUL BASIC имеет функцию FreeFile[(дапазонНомеров)], возвращающую номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет (открыто максимально допустимое количество каналов), возникает ошибка выполнения. Необязательный параметр дапазонНомеров позволяет определить диапазон значений, из которых выбирается очередной свободный номер канала:

если 0 (по умолчанию) - возвращается номер канала из диапазона 1-255,

если 1 - то из диапазона 256 - 511.

Типы доступа

В VISAUL BASIC реализованы три типа доступа к файлам:

последовательный (для обработки текстовых файлов);

произвольный (для обработки текста или структурированных двоичных файлов с записями фиксированной длины);

двоичный (для обработки произвольно структурированных файлов).

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

Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора открытия файла:

Open имяФайла For режим As дескрипторФайла

Где: имяФайла определяет имя открываемого файла; это либo строка символов, заключенная в кавычки, либо выражение, значением которого является строка символов. Она представляет собой путь к открываемому файлу;

режим - это режим доступа, который может иметь значения:

Input (Ввод) - если файл открывается для чтения из него текстовых данных.

Output (Вывод)- если файл открывается для записи в него данных, начиная с первой позиции. Вся имевшаяся в нем старая информация будет стерта.

Append (Дополнение) - если файл открывается для записи в него данных не с первой, а с конечной позиции, так что вся имевшаяся в нем старая информация будет сохранена.

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

Все открытые файлы закрываются оператором:

Close [списокДескрипторов]

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

Для записи в файл используются операторы:

Print # ДескрипторФайла, [СписокЗначений]

Write # ДескрипторФайла, [СписокЗначений]

Где: СписокЗначений - это записанные через разделитель значения (или выражения).

Оба оператора записывают данные в файл текстовыми строками. Текстовая строка - это последовательность символов, которая заканчивается символом перехода на новую текстовую строку или символом возврата каретки (коды 13 и 10). Текстовый файл представляет собой последовательность текстовых строк.

Логика работы операторов Write и Print различна.

Оператор Write

Разделителем в списке значений является запятая. Список значений просматривается последовательно, и элементы этого списка записываются в одну текстовую строку файла через запятую. Элементы типа String заключаются в кавычки. После записи последнего элемента записывается символ перехода на новую строку.

Например, напишем программу записи в текстовый файл следующих строк:

"Иванов", 1982

"Петров", 1984

"Сидорова", 1983

"Крылов", 1980

В каждой строке - фамилия и год рождения.

На рис. 68 в окне редактора кодов приведен текст процедуры создания текстового файла с использованием оператора Write.

Р ис. 68. Вариант 1. Использование оператора Write

Оператор Print

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

если (;) - значения будут записываться подряд, без промежутков между ними;

если (,) - значения будут записываться в 14-символьные зоны вывода.

Кроме того, в списке значений оператора могут присутствовать функции:

Spc(n) - для вставки n пробелов между значениями в текстовой строке;

Tab(n) - для указания номера n позиции для записи следующего значения.

На рис. 69 в окне редактора кодов приведен текст процедуры создания текстового файла с использованием оператора Print.

Для чтения из файла используются:

- оператор Input # ДескрипторФайла СписокПеременных

-оператор Line Input # ДескрипторФайла Переменная

- функция Input (ЧислоСимволов, дескрипторФайла)

Р ис. 69. Вариант 2. Использование оператора Print

Оператор Input

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

Оператор Line Input

Переменная - это переменная типа String или Variant. Результатом работы этого оператора является присвоение Переменной значения - всей очередной текстовой строки файла.

Функция Input

ЧислоСимволов - это количество символов, которое надо прочесть из входного файла. Функция возвращает текст в виде символьной строки. Чаще всего эту функцию используют для одновременного чтения всего текстового файла и размещения его в текстовом поле экранной формы.

Рассмотрим примеры чтения созданного в предыдущем примере файла ГодР1.txt:

А налогичный результат дает работа программы, использующей оператор Line Input:

Private Sub Command3_Click()

Dim ts As String

Open "c:\ГодР1.txt" For Input As #1

Do Until EOF(1)

Line Input #1, ts

Print ts

Loop

Close #1

End Sub

Пример использования функции Input:

Private Sub Command3_Click()

Dim ks As Integer

Open "c:\ГодР1.txt" For Input As #1

ks = LOF(1)

Print Input(ks, #1)

Close #1

End Sub

При обработке файлов также используются функции: EOF(дескрипторФайла) - возвращает значение True, если обнаружен конец файла и False - в противном случае.

LOF(дескрипторФайла) - возвращает размер текстового файла в символах.

Пользовательский тип данных

Файлы произвольного доступа хранят структурированные данные и состоят из записей.

Запись – это некоторая порция данных, которая имеет строго определенный размер и свой номер в файле.

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

Для определения переменных, которые могли бы хранить структуру в VISUAL BASIC, нет встроенных типов таких как, например Integer, String и т.д. Однако VISUAL BASIC позволяет создавать на основе встроенных типов так называемые пользовательские типы. К пользовательским типам относиться тип запись. Запись позволяет хранить совокупность данных разного типа и представляет собой структуру, компоненты которой являются полями записи.

Все пользовательские типы необходимо объявлять. Это делается следующим образом:

{Private| Public} Type ИмяТипаДанных

Элемент1 As ТипЭлемента1

. . .

ЭлементN As ТипЭлементаN

End Type

Где: ИмяТипаДанных - это имя, которое присваивается определяемому типу данных;

Элемент1- ЭлементN – имена полей записи;

ТипЭлемента – любой встоенный или объявленный ранее пользовательский тип.

Примечание: все данные String должны иметь фиксированную длину.

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

Например, определим следующий пользовательский тип данных:

‘(General)(Declarations)

Public Type ДанныеСтудент

Фамилия As String*15

Имя As String*10

Группа As String*4

ОцМатем As Integer

ОцИнфор As Integer

ОцФилос As Integer

End Type

После определения пользовательского типа данных необходимо объявить переменные, которые будут иметь этот тип.

Объявим переменную Студент, имеющую пользовательский тип ДанныеСтудент и найдем длину записи, которой будет являться любое значение этой переменной:

Dim Студент As ДанныеСтудент, x As Integer

x= Len(Студент)

Переменные пользовательского типа могут быть локальными, глобальными и переменными контейнера

Файлы с произвольным доступом

Открытие файла

Open ИмяФайла For Random [Access доступ] [блокировка] _ As #ДескрипторФайла Len = ДлинаЗаписи

Где: - Random – определяет режим доступа к данным - произвольный;

Access позволяет задать права доступа к открываемому файлу. Параметр Доступ задается константами: Read – только для чтения, Write – только на запись, Read Write – чтение и запись (действует по умолчанию);

Блокировка позволяет определить права доступа к данным файла при многопользовательской работе. Параметр может принимать значения:

Shared – файл может использоваться всеми пользователями для чтения и записи;

Lock Read – запрещает другим пользователям считывать данные этого файла;

Lock Write – запрещает другим пользователям записывать данные в этом файл;

Lock ReadWrite – запрещает другим пользователям считывать и записывать в файл.

ДлинаЗаписи - целое число. Оно должно быть равно длине переменной пользовательского типа, которая применяется для хранения одной записи файла. Если это значение меньше длины записи, то возникает ошибка, если больше, то будет использоваться больше дискового пространства.

Закрытие файла

См. закрытие текстовых файлов.

Запись в файл

Для включения в файл произвольного доступа новой записи используется оператор:

Put # ДескрипторФайла[, НомерЗаписи], ИмяПеременной

НомерЗаписи - это номер (целое положительное число), который будет иметь запись, помещаемая в файл. Если номер записи не указан, то запись данных осуществляется в текущую запись (текущая запись – это запись на которой позиционирован указатель).

ИмяПеременной - это имя переменной пользовательского типа, значением которой является запись, помещаемая в файл.

Чтение из файла

Для извлечения записи из файла произвольного доступа применяется оператор:

Get # ДескрипторФайла[, НомерЗаписи], ИмяПеременной

Где:

НомерЗаписи - это номер извлекаемой из файла записи. Если номер не указан, считывается текущая запись.

ИмяПеременной - это имя переменной пользовательского типа, значением которой является запись, извлекаемая из файла.

Пример решения задачи создания и обработки файла прямого доступа:

Private Type ДанныеСтудент

Фамилия As String * 15

Имя As String * 10

Группа As String * 4

ОцМатем As Integer

ОцИнфор As Integer

ОцФилос As Integer

End Type

Private Sub Command1_Click()

Dim Студент As ДанныеСтудент, i As Integer

Open "danst" For Random As #1 Len = Len(Студент)

For i = 1 To 5

Студент.Фамилия = InputBox("Фамилия")

Студент.Имя = InputBox("Имя")

Студент.Группа = InputBox("Группа")

Студент.ОцМатем = Val(InputBox("Оценка по математике"))

Студент.ОцИнфор = Val(InputBox("Оценка по информатике"))

Студент.ОцФилос = Val(InputBox("Оценка по философии"))

Put #1, i, Студент

Next

Close 1

End Sub

Private Sub Command2_Click()

Dim Студент As ДанныеСтудент, i As Integer

Open "danst" For Random As #1 Len = Len(Студент)

Print

For i = 1 To LOF(1)/Len(Студент)

Get #1, i, Студент

Print " " & Trim(Студент.Фамилия) & " " & _ Trim(Студент.Имя) & " " & Trim(Студент.Группа)

Next i

Close #1

End Sub

Рис. 71. Результат решения задачи создания и обработки файла прямого доступа

Файлы двоичного доступа

Для открытия двоичного файла применяется оператор:

Open ИмяФайла For Binary As # ДескрипторФайла

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

Запись данных в файл происходит при помощи оператора:

Put # ДескрипторФайла, НомерБайта, ИмяПеременной

Где:

НомерБайта - номер байта в файле, т.е. то место в файле, куда надо поместить данные.

Чтение данных из двоичного файла осуществляется оператором:

Get # ДескрипторФайла, НомерБайта, ИмяПеременной

Где:

НомерБайта - номер байта в файле, т.е. то место в файле, откуда надо прочитать данные.

Найти этот номер байта бывает очень трудно. В этом заключается недостаток двоичного доступа.

Пример:

Private Type ФамИм

Фамилия As String

Имя As String

End Type

Dim фаим As ФамИм

Dim mas() As String * 1

Private Sub Command1_Click()

Open "Faim.bin" For Binary As #1

L% = 1

For i = 1 To 2

фаим.Фамилия = InputBox("Фамилия")

Lf% = Len(фаим.Фамилия)

фаим.Имя = InputBox("Имя")

Li% = Len(фаим.Имя)

Put #1, L, фаим.Фамилия

Put #1, L + Lf, фаим.Имя

L = L + Li + Lf

Next

Close 1

End Sub

Private Sub Command2_Click()

Open " Faim.bin" For Binary As #1

k = LOF(1)

ReDim mas(k)

For i = 1 To k

Get #1, i, mas(i)

Print mas(i);

Next

Close #1

End Sub

Типы интерфейсов. Элементы интерфейса.

Интерфейс – способ взаимодействия человека с компьютером. Средствами пользовательского интерфейса в приложении обеспечивается доступ к данным и задачам, решаемым приложением. Поэтому интерфейс является важной частью приложения.

VISUAL BASIC позволяет разрабатывать интерфейс трех типов:

однодокументный SDI (Single – Document Interface) интерфейс;

многодокументный MDI (Multiple – Document Interface);

интерфейс типа проводник (Explorer).

SDI интерфейс позволяет в одном окне работать только с одним документом и состоит из элементов:

главное меню;

панели инструментов с элементами управления;

окна приложения для размещения элементов управления данными;

элементы управления для работы с данными, строка состояния.

MDI интерфейс – это интерфейс с одним главным и некоторым количеством дочерних окон, которые открываются внутри главного. Главное окно называется родительским. Дочерние окна могут находиться только внутри родительского окна. MDI интерфейс состоит из элементов:

главное окно приложения (MDI-окно);

главное меню;

панель инструментов с элементами управления;

дочерние окна;

элементы управления, расположенные в дочерних окнах для работы с данными;

строка состояния.

Интерфейс типа проводник представляет собой однооконный интерфейс аналогичный SDI интерфейсу для отображения иерархических древовидных структур (пример: интерфейс Explorer Windows). В дополнение к перечисленным в SDI-интерфейсе элементам интерфейса, данный интерфейс имеет элемент – иерархический список элементов древовидной структуры.

Основным элементом интерфейса любого типа является окно. Окно приложения в VISUAL BASIC строится на основе форм.

Форма. Основные свойства и события формы.

Форма является основой любого приложения. Любой проект VISUAL BASIC содержит как минимум одну форму, которая представляет собой главное окно приложения.

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

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

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

Свойства определяют внешний вид и функционирование элемента управления.

Значения свойствам элементов управления могут быть присвоены двумя способами:

В окне Properties (свойства) для выбранного в форме элемента управления.

В процедуре модуля формы:

[Форма.]Объект.Свойство = Значение

Например: Text1.Text=”Иванов”

Значение свойства элемента управления может быть присвоено переменной:

Переменная = [Форма.]Объект.Свойство

Например: Fam= Text1.Text

Основные свойства формы:

Name – задает уникальное имя (идентификатор) формы, который затем используется в программных модулях при обращении к форме.

Caption – задает текст, выводимый в заголовок окна.

Height (высоту) и Width (ширину)– задают размер формы.

Left (расстояние от левого края экрана) и (расстояние от верхнего края экрана) - определяют положение формы на экране.

ScaleMode - задает единицу измерения свойств Height, Width, Left и Top. По умолчанию стандартной единицей является твип.

BorderStyleопределяет вид и установку рамки окна. С помощью рамки можно менять не только внешний вид окна, но и размеры. Свойство может иметь значения:

0 -Окно без рамки. Размер окна изменяться не может. Нет строки заголовка. Окно не может перемещаться. Минимизация и максимизация окна не возможны.

1 - Фиксированная рамка. Есть заголовок, кнопки минимизации и максимизации окна, но размер окна меняться не может.

2 - Значение по умолчанию. Возможны все изменения размера окна.

3 - Окно окаймляется толстой рамкой. Изменения размера невозможны. Нет кнопок минимизации и максимизации. Минимизировать и максимизировать можно только из системного меню.

ControlBox - определяет, отображается ли системное меню, с помощью которого пользователь может выйти из программы.

MaxButton определяет наличие кнопки максимизации. При значении False кнопка будет отсутствовать, а команда Развернуть удалится из системного меню.

MinButton определяет наличие кнопки свертывания окна. При значении False кнопка затемняется, а из системного меню удаляется строка Свернуть.

Font задает шрифт в окне.

ForeColor задает цвет выводимого в окне текста.

Icon задает значок для формы.

WinwowState управляет состоянием окна при запуске и может принимать следующие значения: нормальное окно, свернутое окно и полное окно.

MDIChild управляет превращением окна типа MDI в дочернее. Форма дочерняя, если свойство имеет значение True. Значение по умолчанию False.

Основные события формы

К наиболее важным событиям формы относятся следующие:

Initialize – происходит в момент создания экземпляра объекта типа форма.

Load - происходит при загрузке формы в память до ее визуального отображения. Используется для инициализации объектов и переменных, принадлежащих форме.

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

GotFocus – происходит при установке фокуса на активизируемой форме.

Deactivate – происходит при удалении формы с экрана, или при переключении на другую форму.

Unload - вызывается, когда форма удаляется из памяти.

Resize – происходит при изменении размеров формы.

Порядок возникновения событий при работе с формой следующий: Initialize, Load, Activate, GotFocus. После загрузки формы в память события Activate, GotFocus, Deactivate могут возникать многократно.

Процедуры обработки события формы имеют следующий синтаксис:

Form_Событие[(Аргументы)]

Отображение формы

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

Имя стартовой формы задается в окне Project Properties, которое открывается при выполнении команды Project Properties из меню Project или из контекстного меню проекта в окне проводника.

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

На текущее состояние формы влияют:

Оператор Load – выполняет загрузку формы в память, форма при этом она не отображается на экране. Формат оператора:

Load ИмяФормы

Оператор Load загружает форму явным образом. Однако форма может быть загружена и неявным способом (автоматически). Это произойдет, если в процедуре выполняется обращение к свойству, методу самой формы или любого элемента управления размещенного в форме.

Метод Show формы позволяет загрузить форму неявным способом и отобразить ее на экране. Вызов метода:

ИмяФормы.Show

Форма может быть отображена в обычном или модальном окне. Обычная форма позволяет пользователю переходить в другую форму. Модальная же форма держит фокус до тех пор, пока окно не будет закрыто. Чтобы отобразить форму в модальном окне следует в качестве параметра указать константу vbModal.

Например: Student.Show vbModal

Метод Hide удаляет форму с экрана, не выгружая ее из памяти. Метод используется для скрытия формы, предоставляю приложению возможность пользоваться введенной в нее информацией.

Оператор UnLoad убирает форму с экрана и выгружает ее из памяти. Формат оператора:

UnLoad ИмяФормы

Оператор UnLoad можно использовать для выгрузки текущей формы. Ссылку на текущую форму можно получить с помощью свойства Me. Тогда для выгрузки текущей формы можно написать оператор: UnLoad Me.

Меню. Создание меню.

Меню – один из основных элементов интерфейса. Оно представляет собой средство быстрого доступа ко всем командам (задачам) приложения.

VISUAL BASIC позволяет создавать иерархическое меню. Максимальное количество уровней – шесть.

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

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

Например: Файл, Правка, Вид, ?(Справка)

На рис. 72 приведен пример двухуровнего меню.

Создание меню в VISAUL BASIC осуществляется с помощью редактора меню. Открывается окно редактора меню командой Tools\Menu\Editor…

Каждая строка (пункт) меню является элементом управления этого меню и имеет набор свойств. Значения свойствам задаются в окне редактора меню (см. рис.73).

Редактор состоит из двух групп элементов:

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

элементы конструирования структуры меню.

С помощью элементов управления свойствами можно задать значения свойствам, имеющим следующее назначение:

Свойство Caption задает наименование пункта меню (вводится текст, который будет виден в строке меню).

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

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

Свойство Index определяет численный идентификатор пункта меню, если он является элементом массива элементов управления.

Свойство Shortcut назначает комбинацию клавиш для быстрого вызова команды без обращения к меню.

Свойство HelpContextId позволяет определить ссылку на тему в справочной системе, для выдачи контекстно-зависимой справки по приложению.

Checked определяет свойство команды меню, являющейся параметром. Свойство может принимать значения: True – рядом с пунктом появиться галочка, False – галочка не отображается.

Свойство Enabled определяет доступ к пункту меню. Значение False для свойства означает, что команду в данный момент времени выполнить нельзя (команда видна, но не доступна).

Свойство Visible определяет, будет ли виден на экране элемент меню.

Свойство WindowList определяет для интерфейса типа MDI будет ли автоматически формироваться динамический список всех активных дочерних окон (список выводиться в меню Window(Окно)).

Элементы конструирования структуры предназначены для формирования структуры меню и позволяют:

перемещать пункты меню (команды) по иерархии меню (кнопки , ) и по структуре (кнопки и );

добавлять и удалять пункты меню (команды).

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

VISUAL BASIC позволяет создавать контекстное или всплывающее меню.

К онтекстное меню создается также как и обычное меню в окне редактора меню (см. рис. 74).

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

Отображение контекстного меню связано с щелчком правой кнопкой мыши на форме. С действием – щелчок кнопкой мыши – связано событие MouseUp (отпускание кнопки). На рис. 75 приведена процедура отображения контекстного меню. При возникновение этого события процедуре обработки событий передаются следующие параметры:

Button – содержит информацию о том какая кнопка была нажата. Константа VbRightButton определяет правую кнопку мыши;

X , Y – определяют координаты указателя мыши в момент щелчка.

В форме может быть создано произвольное количество контекстных меню. Отображаться они будут после щелчка правой кнопки мыши в различных областях формы. Параметры x, y определяют координаты указателя.

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

Стандартные элементы управления для работы с данными размещены в блоке инструментов (панель ToolBar) и становятся доступными пользователю при работе в режиме конструктора форм.

Первоначально на панели размещены так называемые внутренние (intrinsic) элементы управления. Это, однако, неполный список элементов, которые входят в поставку VISUAL BASIC. Для размещения в блоке инструментов других элементов предназначена команда Project\Components.

Кнопка

Кнопка (CommandButton) используется для инициирования пользователем необходимых действий, которые начинают выполняться после щелчка мышью по кнопке.

Событие Click возникает:

а) при непосредственном щелчке по кнопке мышью;

б) при перемещении фокуса на кнопку с помощью клавиши Tab с последующем нажатием клавиши Enter.

Свойства:

Caption – задает название кнопки (текст на кнопке). С помощью свойства можно назначить для кнопки клавиши быстрого доступа. Для этого следует перед буквой, соответствующей желаемой клавиши поместить символ &.

Например, если задать свойству значение Ф&ормат, то кнопке будут назначена команда Alt+о, на кнопке будет выведен текст Формат.

Default - определяет, что данная кнопка активна по умолчанию. Если в форме несколько кнопок, то на одну из них можно по умолчанию поместить фокус, задав свойству Default этой кнопки значение True. Такая кнопка называется стандартной (default button). Если нажать клавишу Enter, то автоматически генерируется событие Click стандартной кнопки, независимо от того какой элемент имеет фокус (обычно это свойство имеет кнопка Ok).

Cancel – позволяет назначить кнопку отмены операции (cancel button). Для такой кнопки событие Click возникает после нажатия клавиши Esc ( обычно это свойство имеет кнопка Cancel).

Style – определяет стиль оформления кнопка. Если свойство имеет значение Standard, то на кнопку выводиться текст свойства Caption. Если свойство имеет значение Graphical – на кнопке графическое изображения, задаваемое свойством Picture.

С помощью свойств Desabled Picture и Down Picture можно задать для кнопки два графических изображения: изображение неактивной кнопки и изображение, отображаемое при нажатии кнопки.

Надпись

Надпись(Label) предназначена для отображения текста в форме, который пользователь не может изменить с клавиатуры. Чаще всего используется для создания подписей к другим элементам управления.

Свойства:

Caption - содержит отображаемый текст. Максимальное количество символов в тексте 65528. Размеры надписи можно задавать:

мышью или командами Shift+{ |  |  | };

свойствами Height и Width;

свойствами Autosize и WordWrap.

Autosize имеет два значения:

значение False – размер надписи постоянный и не зависит от длины текста в свойстве Caption;

значение True – размер надписи автоматически подстраивается под значение свойства Caption.

При этом изменение размеров элемента зависит от значения свойства WordWrap. Если значение свойства False, то размеры надписи будут увеличиваться только в горизонтальном направлении, пока весь текст не будет виден на экране. Если свойство имеет значение True, то увеличение размеров будет выполняться по вертикали. При этом будет происходить автоматический перенос слов на новую строку.

Примечание: Первоначально значение присваивается свойству WordWrap, а затем значение True свойству AutoSize.

Используя следующие способы можно задать принудительный перенос текста в нужном месте:

поместить в текст константу vbCrLf;

поместить в текст символы с кодами 13 (перевод строки) и 10 (возврат каретки).

BorderStyle - способ отображения текста - с рамкой или без нее.

Font – задает тип, гарнитуру, размер и стиль шрифта отображаемого текста.

ForeColor и BackColor задают цвет текста и фона;

Appearance определяет внешний вид: объемный (1-3d) или плоский (0 – Flat).

Текстовое поле (TextBox)

Является основным элементом управления, предназначенным для ввода данных.

События:

Change - вызывается при изменении содержимого текстового поля. Происходит каждый раз при вводе, удалении или изменении символа. Событие возникает до потери.

Пример контроля вводимых данных (ввод в текстовое поле только числового значения):

Private Sub txtNomGr_Change()

If Not IsNumeric(txtNomGr) Then

MsgBox “Вводите только цифры”

EndIf

End Sub

Validate – используется для проверки введенного в текстовое поле значения. Событие Validate возникает только в том случае, если для текстового поля свойству Causes Validation задано значение True.

Пример контроля вводимых данных (на соответствие вводимого значения заданному диапазону значений):

Private Sub txtNomGr_Validate(Cancel_

As Boolean)

If Val(txtNomGr.Text)<100 Or _

Val(txtNomGr.Text)>9999 Then

MsgBox “Номера групп от 100 до 9999”

EndIf

End Sub

Примечание: При проверке работы процедуры примера для перемещения между элементами лучше использовать клавишную команду Tab.

LostFocus - используется для анализа введенного в поле текста. Событие возникает, когда текстовое поле становится неактивным (после передачи фокуса другому элементу). Однако, если это поле является единственным элементом в форме, то оно не может потерять фокус.

Первым возникает событие Validate, затем LostFocus.

GotFocus - используется для удаления или инициализации содержимого текстового поля. Вызывается, когда курсор устанавливается в текстовое поле.

Пример:

Private Sub txtNomGr_LostFocus()

Stud.NomGr=txtNomGr.Text

End Sub

Свойства текстового поля:

Text - содержит отображаемый в поле текст.

Enabled – определяет, будет ли элемент управления реагировать на событие или нет. Если свойству задано значение False, то элемент недоступен.

Visible – управляет видимостью элемента на экране. Если значение свойства False, то элемент “скрыт” от пользователя

Пример:

Private Sub Command1_Click()

Command1.Enabled = False

Command2.Visible = False

End Sub

ToolTipText – содержит текст всплывающей подсказки.

PasswordChar – задает символ, отображаемый в поле вместо вводимых символов.

– определяет максимальное число символов, вводимых в текстовое поле.

С помощью свойства PasswordChar и MaxLength можно предназначить текстовое поле для ввода пароля.

Примечание: В VISUAL BASIC существует стандартный шаблон формы Log in Dialog создания диалогового окна для ввода пароля пользователя.

Для управления текстом используются следующие свойства:

MultiLine - для ввода в текстовое поле нескольких строк.

ScrollBars - определяет, какую полосу прокрутки будет иметь текстовое поле (горизонтальную, вертикальную или обе).

SelStart - определяет начальную позицию выделенного текста в символах.

SelLength - содержит количество выделенных символов.

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

Пример выделения всего текста в текстовом поле и замена его новым:

Private Sub Text1_GotFocus()

Text1.SelStart =0

Text1.SelLength = Len(Text1.Text)

End Sub

Флажок(CheckBox)

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

События:

Click - щелчок мыши.

Свойства:

Value – задает значение флажка:

0 - отмечен;

1 - не отмечен;

2 - третье состояние.

Style – определяет внешний вид флажка:

0-Standard – обычный;

1-Graphical – графический. В этом случае элемент имеет вид кнопки (утопленной/приподнятой).

Переключатель (OptionButton)

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

События:

Click - щелчок мыши. Это событие вызывается, если пользователь с помощью мыши или клавиш управления курсором выбирает элемент в списке.

Свойства:

Value - состояние переключателя (True или False).

Переключатели чаще всего образуют группу элементов. Создать группу переключателей можно следующими способами:

Создать массив переключателей. В этом случае для программирования действий при установке переключателя можно использовать процедуру:

Private Sub optBut1_Click(Index As Integer)

Select Case Index

Case 0

MsgBox “Выбрали первый переключатель”

Case 1

MsgBox “Выбрали второй переключатель”

End Select

End Sub

Переключатели следует разместить в элементе управление Группа (Frame). Для определения состояния переключателя можно использовать оператор If:

If optBut1=True Then

MsgBox “Выбрали первый переключатель”

Else

MsgBox “Выбрали второй переключатель”

EndIf

Рамка (Frame)

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

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

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

Например: Если для рамки свойство Visible равно False, то все входящие в рамку элементы тоже станут невидимыми.

События рамки обычно не анализируются.

Список (ListBox)

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

События:

Click - щелчок мыши. это событие вызывается, если пользователь с помощью мыши или клавиш управления курсором выбирает элемент в списке.

Методы:

Необходимы для обработки элементов списка - добавления или удаления.

AddItem - для добавления новых элементов:

ListBox.AddItem Элемент[, Индекс]

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

Пример: Создание списка разрядов

Private Sub Form_Load()

lstRasr.AddItem "10"

lstRasr.AddItem "11"

lstRasr.AddItem "12"

lstRasr.AddItem "13"

lstRasr.AddItem "14"

lstRasr.AddItem "15"

lstRasr.AddItem "16"

lstRasr.AddItem "17"

End Sub

RemoveItem - для удаления элемента из списка:

ListBox. RemoveItem Индекс_элемента

Индекс_элемента - индекс удаляемого элемента. Индексация начинается с 0.

Clear - для удаления всех элементов списка

ListBox. Clear

Свойства:

Text - текст выбранного элемента списка.

List() - определение текста элементов списка в окне свойств (переход на новую строку в списке выполняется командой Ctrl+Enter).

Sorted - определяет способ расположения элементов в списке (по алфавиту).

ListIndex - определение индекса выбранного элемента. Если в списке не выбран ни один элемент, то значе­ние свойства = -1.

Пример. Обращение по индексу к элементу списка с помощью свойства List()

ls = lstBox.List(lstBox.ListIndex)

ListCount - текущее количество элементов в списке. Используется при обработке содержимого всех элементов списка в цикле.

For i=0 to lstBox.ListCount-1

‘ обработка lstBox.List(i)

Next i

Style – определяет внешний вид списка: стандартный список (0) или список флажков (1).

Columns – определяет количество колонок в тексте:

0 – обычный список;

1 – одна колонка с горизонтальной линейкой;

2 – две колонки.

MultiSelect - одновременный выбор нескольких элементов списка: 0 - множественный выбор невозможен.

1 - простой множественный выбор. Элементы списка выбираются щелчком мыши или нажатием Space

2 - расширенный множественный выбор. Пользователь может выбрать несколько элементов с помощью мыши или клавиш управления курсором с использованием клавиш Shift и Ctrl.

Selected() - показывает, выделен данный элемент списка или нет. Свойство Selected содержит массив значений, соответствующих количеству элементов в списке. Если значение элемента в массиве равно True, то данный элемент выбран.

Пример:

For i=0 to lstBox.ListCount-1

If lstBox.Selection(i) then

‘ обработка lstBox.List(i)

EndEf

Next i

Itemdata – позволяет задать список значений (тип Long Integer), элементы которого соответствуют элементам списка ListBox.

Пример. Создать список lstFam. Элементами списка являются фамилии студентов существующего файла данных. Свойству ItemData присвоить список значений – номера зачетной книжки студентов.

Private Sub Form_Load()

Open “Stud” For Random As#1 Len=Len(Stud)

For i=1 to Lof(1)\Len(Stud)

Get#1,i,Stud

LstFam.AddItem Stud.Fam

LstFam.ItemData(lstFam.NewIndex)=Stud.NomSt

Next

End Sub

‘ Свойства NewIndex содержит индекс последнего добавленного в список элемента

Private Sub lstFam_Click()

‘ действие над значением – номер зачетной книжки, полученным после выбора фамилии студента из списка

n=lstFam.ItemData(lstFam.ListIndex)

End Sub

Поле со списком (ComboBox)

Это комбинированный список, представляет собой комбинацию двух элементов управления - самого списка со значениями и поля ввода текста (текстового поля). Используется, когда нельзя заранее определить значения, которые следует включить в список, или список содержит слишком много элементов. В таком списке нужное значение можно не только выбирать, но и вводить непосредственно в поле ввода. Новое значение поля автоматически помещается в список.

События:

Click - Щелчок мыши. Используется для выбора элемента списка.

Change - Для изменения записи в поле ввода текста.

Свойства:

Поле со списком имеет почти все свойства текстового поля и списка (за исключением MultiLine)

Style - определяет внешний вид и функционирование поля со списком:

0 - ComboBox представляет собой текстовое поле для редактирования и открывающийся список (задано по умолчанию).

1 - ComboBox представляет собой текстовое поле для редактирования и постоянно открытый список.

2 - отличается от 0 тем, что пользователь не может вводить текст в текстовое поле.

Рассмотрим пример использования элементов управления для работы с данными в форме.

Создать справочник персонала. Для ввода сведений о работнике разместить в форме элементы управления: текстовые поля, список, переключатели (см.рис.77).

Р ис. 77. Форма для ввода сведений о работнике

Private Sub Command1_Click()

Dim фамилия As String, имя As String, отчество As String

Dim номер As String, разряд As String, пенсия As String

Dim пол As String

Open "c:\person.txt" For Append As #1

Do Until txtFam.Text = ""

фамилия = txtFam.Text

имя = txtName.Text

отчество = txtOtch.Text

номер = txtTab.Text

разряд = lstRasr.Text

If Option1.Value = True Then

пол = "м"

Else

пол = "ж"

End If

If Check1 = 0 Then

пенсия = "да"

Else

пенсия = "нет"

End If

txtFam.Text = ""

txtName.Text = ""

txtOtch.Text = ""

txtTab.Text = ""

Print #1, фамилия; ","; имя; ","; отчество; ","; номер; ","; _

разряд; ","; пенсия; ","; пол

Loop

Close #1

End Sub

Private Sub Form_Load()

lstRasr.AddItem "10"

lstRasr.AddItem "11"

lstRasr.AddItem "12"

lstRasr.AddItem "13"

lstRasr.AddItem "14"

lstRasr.AddItem "15"

lstRasr.AddItem "16"

lstRasr.AddItem "17"

End Sub