Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Visual Basic 6.0 / БВГ / БурковВГ_Материалы_Расширений_электронных_лекций / К_лекции_Буркова_Операторы управления порядком выполнения команд.doc
Скачиваний:
69
Добавлен:
02.05.2014
Размер:
76.8 Кб
Скачать

For…Next

Цикл For. . .Nextявляется самой старой и самой простой конструкцией:

For Счетчик = Начальное_значениеТоКонечное_значение [StepШаг]

[Операторы]

Next[Счетчик]

В начале выполнения цикла значение Счетчик устанавливается в Начальное значение. При каждом проходе переменная Счетчик увеличивается на 1 или на величину шаг. Если она достигает или становится больше (меньше, при отрицательном шаге) Конечное значе­ние, то цикл завершается и выполняются следующие операторы. Разность между началь­ным и конечным значением, деленная на величину шага, составляет число проходов:

For I = 1 То 10

Print I * 100 Next I

For L °= 100 To 5 Step k0.5

X k Y * L Next

I * ~__

For II = 1 To 5

For 12 = 10 To 20 Print II + 12

Next 12 Next II ‘Или ..(Next

12,11)

В этом примере представлены разные конструкции циклов For.. .Next. Часто для вы­числений внутри цикла используются числовые переменные:

‘(General)(Declaration)

Dim aArray(1997 To 2050)

Private Sub Comniandl_Click ()

For I = LBound(aArray) To UBound(aArray)

Print aArray (I)

Next I

EndSub

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

Do... Loop

Если количество проходов должно зависеть от условия, используют цикл Do... Loop. В зависимости от позиции условия различают два варианта циклаDo...Loop.Цикл, управ­ляемый в начале::

Do [(While | Until) Условие]

[Опера торы]

[Bxit Do]

[Операторы]

Loop

Цикл, управляемый в конце

Do

[Операторы]

[Exit Do]

[Операторы]

Loop [{While | Until} Условие]

Если условие проверяется в начале цикла, то он никогда не выполняется в случае не­выполнения условия. Если же проверка происходит в конце, цикл выполняется как мини­мум один раз, независимо от того, выполнено условие или нет.

Тело цикла выполняется неопределенное число раз, пока условие не вызовет выход из цикла:

Do Until EOF(Файл)

Input #1, SomeData

Loop

Do

X = X + 1 Print “Hello”

Loop While X < 9

Рассмотренные варианты циклов Do... Loopпредоставляют разработчику большие воз­можности организации повторяющихся вычислений.

While…Wend

В Visual Basic цикл While. .. Wendиграет второстепенную роль. Он используется только для совместимости с другими диалектами Basic, а также для совместимости с более ран­ними версиями Visual Basic, в которых не было оператораDo. . .Loop.

WhileУсловие

[Операторы]

Wend

Принцип его действия такой же, как и цикла Do While.. . Loop. Поэтому вместо него проще использовать Do.. .Loop. Кроме того, для циклаWhile. . .Wendнет оператора дос­рочного выхода типа Exit:

While X = True

PrintTime

Wend

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

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

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

Рис. 2.6. Îêíî Visual Basic при вставке в форму одноименного элемента управления из бу­фера обмена

Если на запрос ответить Нет, Visual Basic поместит в форму элемент управления и даст ему имя по умолчанию, например Command1. После ответа Да в форме появятся два элемента управления с одинаковым именем. Чтобы Visual Basic мог различать эти эле­менты, автоматически устанавливается свойство index.

Это можно заметить и в окне свойств. В списке элементов отображается несколько эле­ментов управления с одинаковым именем, после которого в скобках указывается индекс. Значение индекса совпадает с указанным в строке index.

Рис. 2.6. Массив элементов управления в окне свойств

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

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

Private Sub CutCopy_Click(Index As Integer)

Call Copy

If Index = 0 Then Call Delete

End Sub

В этом примере всегда вызывается процедура Copy.Если элемент имеет индекс 0, то послеCopyдополнительно выполняется процедураDelete. Для массива элементов управления нс требуется указание индексов по порядку — каждому элементу можно при­своить произвольное значение, которое будет использовано в коде.

Предположим, вы хотите с помощью кнопки установить состояние формы, воспользовав­шись свойством WindowState, которое может принимать три значения:

0 — для окна в нормальном представлении, 1 — в виде пиктограммы и 2 — для разверну­того вида.

Теперь в форму добавим три кнопки с одинаковыми именами, значения индексов которых соответствует значениям свойства WindowState.

Рис. 2.7. Пример массиаа элементов управления

В общсп процедуре click индекс можно присвоить непосредственно свойству WndowStаte

Private Sub Window_Click(Index As Integer)

Form1.WindowState = Index

End Sub

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

Load

Иногда требуется использовать массив элементов управления, не зная заранее их количество. В этом случае следует воспользоваться оператором Load, который позволяет загрузить элемент управления во время работы приложения. Для этого нужен только эле­мент управления, определенный как массив (свойство index содержит определенное зна­чение):

Private Sub Commandl_Click(Index As Integer)

Static nCounter As Integer

nCounter = nCounter + 1

Load Commandl(nCounter)

Command1(nCounter).Visible = True

Commandl(nCounter).Top = nCounter * 100

EndSub

В этом примере в форме изначально присутствует кнопка с индексом 0. В ходе выпол­нения программы каждый щелчок на любой кнопке добавляет новую. Переменная nCounter используется для определения индекса вновь загруженного элемента. С помо­щью свойства visible новый элемент отображается. Так как все свойства совпадают со свойствами исходного объекта, следует изменить также свойство Тор, чтобы кнопки не накладывались одна на другую.

Unload

С помощью оператора Unload удаляются в любой последовательности все загру­женные во время выполнения элементы управления (за исключением тех, которые были созданы при проектировании):

Private Sub Commandl_Click(Index As Integer)

Unload Commandl(Index)

End Sub

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

Динамическое добавление элементов управления

Другой метод добавления элементов управления заключается в использовании метода Add семейства Controls. С помощью этого метода вы можете добавить в форму: элемент управления на основании существующего (например, еще одно поле для ввода); элемент управления нового типа (например, кнопку в форму в которой кнопок не было); элемент управления, ссылки на который до этого в проекте не было. Динамическое добавление элементов управления может быть использовано для расширения функциональных воз­можностей приложения даже после его создания и установки. Например, вы можете соз­дать приложение, способное не только изменять набор доступных пользователю элемен­тов управления в зависимости от прав пользователя или круга решаемых задач, но и счи­тывать этот набор из файла или базы данных, что позволит модифицировать приложение без перекомпиляции и переустановки.

Синтаксис метода Add следующий:

object.Add (ProgiD, name, container)

где: object— обязательный параметр, представляющий собой объект (семействоControls), в который добавляется элемент управления.progiD — обязательный аргумент — строка идентификатор элемента управления. ЗначениеProgiDдля большинства эле­ментов управления можно определить с помощью утилитыObject Browser;это значение обычно составляется из имени библиотеки и имени класса конкретного элемент управле­ния (например, для элементаCommandButton ProgiD= VB.CommandButton).

name— обязательный аргумент — строка, идентифицирующая элемент семейства.container — необязательный аргумент — ссылка на объектkконтейнер для элемент управ­ления. Если этот аргумент не определен или равен NULL, то принимается по умолчанию контейнер, которому принадлежит семейство controls. Приведем несколько примеров ис­пользования этого метода. В первом примере при загрузке формы динамически добавля­ется элемент управления CommandButton:

Private Sub Form_Load()

Forml.Controls.Add “VB.CommandButton”, “cmdObjl”, Framel

With FormlicmdObjl .Visible = True

Width = 2000

.Caption = “Динамическая кнопка”

EndWith

EndSub

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

Option Explicit Private WithEvents btnObj As CommandButton

Private Sub btnObj_Click ()

MsgBox «Это динамически добавленная кнопка.»

End Sub

Private Sub Form_Load()

Set btnObj = Controls.Add(“VB.CommandButton”, “btnObj”)

With btnObj

.Visible = True .Width =2000

Caption= “Hello”

.Top= 1000

.Left= 1000

EndWith

EndSub

В третьем примере добавляется элемент управления, ссылки на который в проекте не было. Для обработки событий такого элемента управления вы должны объявить объ­ектную переменную типа VBControlExtenderи затем присвоить ей ссылку на объект, возвращаемую методомAdd.Обработка всех событий элемента управления выполняется в процедуре обработки событияObjectEvent.

Option Explicit

Dim ctlExtender As VBControlExtender

Private Sub Form_Load()

Set ctlExtender = Controls.Add(“Projectl.UserControll”, “MyControl”)

With ctlExtender

Visible = True

Top [ 1000 \. .Left = 1000

End With

End Sub

Private Sub extObj_ObjectEvent(Info As Eventlnfo)