Проверка данных управления путем ограничения фокуса
Событие Validate и свойство CausesValidation используются совместно для подтверждения ввода в элемент управления, прежде чем позволить пользователю переместить фокус с элемента управления. Например: рассмотрим приложение с несколькими текстовыми полями и кнопкой «Справка». Когда каждое текстовое поле получает фокус, вы хотите запретить пользователю перемещать фокус до тех пор, пока не будут выполнены специальные критерии проверки текстового поля; Пользователь может переместить фокус, когда текстовое поле получает фокус. Кнопку «Справка» можно нажать в любое время. Для этого установите критерии проверки в событии Validate и установите для свойства CausesValidation кнопки «Справка» значение False. Если для свойства установлено значение True (настройка по умолчанию), событие Validate произойдет в первом элементе управления. Если для свойства установлено значение False, событие Validate для первого элемента управления произойдет первым.
Событие Validate больше подходит для проверки записей данных, чем событие LostFocus, поскольку событие LostFocus (по определению) возникает после перемещения фокуса. Вместо этого, используя событие Validate, вы можете предотвратить перемещение фокуса на другой элемент управления до тех пор, пока не будут выполнены правила проверки.
возможное использование
Приложениям ввода данных необходимо выполнять более сложную проверку ввода данных, чем проверка, предоставляемая элементом управления MaskedEdit или выполняемая в бизнес-правилах.
Форма должна запрещать пользователю использовать клавишу TAB или клавиши быстрого доступа для перемещения элементов управления до тех пор, пока данные не будут введены в поле.
Документам ActiveX, работающим в Internet Explorer, требуется возможность пользователю завершить работу с формой до того, как сценарий переместит фокус программным путем.
Управление фокусом на событии проверки
Событие Validate включает параметр Keepfocus. Если для параметра установлено значение True, элемент управления сохраняет фокус. Это эффективно предотвращает нажатие пользователем других элементов управления.
Использование массива элементов управления
Массив элементов управления — это группа элементов управления с общим именем и типом. Их ход событий также одинаков. Массив элементов управления должен иметь хотя бы один элемент, и количество элементов может быть увеличено в пределах, разрешенных системными ресурсами и памятью. Размер массива также зависит от памяти и ресурсов Windows, необходимых каждому элементу управления. Максимальное значение индекса, доступное в массиве управления, — 32767. Элементы в одном массиве элементов управления имеют свои собственные настройки свойств. Обычное использование массивов элементов управления включает реализацию элементов управления меню и группировок кнопок выбора.
Обратите внимание , что Visual Basic включает возможность динамического добавления элементов управления, на которые нет ссылок, в коллекцию Controls во время выполнения. В этом разделе речь идет только о ссылочных элементах управления, которые добавляются во время разработки путем вырезания и вставки элемента управления в форму. Дополнительные сведения о добавлении элементов управления во время выполнения см. в справочных разделах «Добавить метод (коллекция Controls)» и «Добавить метод (коллекция лицензий)».
Зачем использовать управляющие массивы
Во время разработки добавление элементов управления с использованием массива элементов управления потребляет меньше ресурсов, чем добавление нескольких элементов управления одного типа непосредственно в форму. Массивы элементов управления также полезны, если вы хотите, чтобы несколько элементов управления использовали общий код. Например, если вы создадите массив элементов управления, содержащий три кнопки выбора, один и тот же код будет выполняться независимо от того, какая кнопка будет нажата.
Чтобы создать новый экземпляр элемента управления во время выполнения, новый элемент управления должен быть членом массива элементов управления. При использовании массива элементов управления каждый новый член наследует процедуры общедоступных событий массива.
Невозможно создавать новые элементы управления во время выполнения с помощью механизма массива элементов управления, поскольку каждый новый элемент управления наследует процедуру обработки событий, написанную для массива. Например, если в вашей форме есть несколько текстовых полей и каждое текстовое поле принимает значение даты, вы можете создать массив элементов управления, чтобы все текстовые поля использовали один и тот же код проверки.
Пример приложения: Calc.vbp
Пример приложения «Калькулятор», показанный на рисунке 7.2 (указанный в каталоге Samples!Alink(vbsamples)), содержит два массива элементов управления — числовые кнопки и кнопки действий.
Обратите внимание, как в примере используется синтаксис объекта (индекс) для ссылки на каждый элемент управления. Укажите значение индекса при создании элемента управления. Фактически, указание произвольного индекса для элемента управления во время разработки сделает элемент управления частью массива.
Свойство Index различает элементы в массиве элементов управления. Когда элемент управления в массиве распознает событие, Visual Basic вызывает процедуру общедоступного события и передает параметр (значение свойства Index), чтобы определить, какой элемент управления распознал событие.
Например, первая строка кода в процедуре обработки события Number_Click выглядит следующим образом:
PRivateSubNumber_Click(IndexAsInteger)
Если Number(0) идентифицирует событие, VisualBasic передает 0 в качестве параметра индекса, а если Number(1) идентифицирует событие, VisualBasic передает 1 в качестве параметра индекса. В отличие от значения индекса, остальная часть выполненного кода Number_Click одинакова для номеров от Number(0) до Number(9).
Создайте массив элементов управления во время разработки
Существует три способа создания массивов элементов управления во время разработки:
1. Дайте одно и то же имя нескольким элементам управления.
2. Скопируйте существующий элемент управления и вставьте его в форму.
3. Установите для свойства Index элемента управления значение, отличное от NULL.
Обратите внимание, что массив элементов управления меню должен быть создан в редакторе меню. Дополнительные сведения об этой операции см. в разделе «Создание и изменение меню во время выполнения» главы 6 «Создание пользовательского интерфейса».
Чтобы добавить элемент массива элементов управления, изменив имя элемента управления:
1. Нарисуйте элемент управления, который нужно добавить в массив элементов управления (должен быть элемент управления того же типа), чтобы определить, какой элемент управления будет первым элементом массива.
2. Выберите элемент управления и измените значение параметра «Имя» на значение параметра «Имя» первого элемента массива.
3. Когда вы вводите существующее имя элемента управления в массиве, Visual Basic отобразит диалоговое окно с запросом подтверждения, хотите ли вы создать массив элементов управления. На этом этапе выберите «ОК», чтобы подтвердить операцию.
Например, если первый элемент массива элементов управления называется cmdCtlArr, выберите CommandButton, добавьте его в массив и задайте для него имя cmdCtlArr. В этот момент отобразится следующее сообщение: «Элемент управления с именем cmdCtlArr». уже существует. Хотите создать массив элементов управления?» Выберите ОК, чтобы подтвердить операцию.
Элементы управления, добавленные таким образом, разделяют только свойство Name и тип элемента управления, остальные свойства имеют те же значения, что и при первоначальном рисовании элемента управления.
Чтобы добавить элемент массива элементов управления путем копирования существующего элемента управления:
1. Нарисуйте элементы управления в массиве элементов управления.
2. Когда элемент управления получит фокус, выберите команду «Копировать» в меню «Правка».
3. В меню «Правка» выберите команду «Вставить». Visual Basic отобразит диалоговое окно с вопросом, подтвердить ли создание массива элементов управления. Выберите ОК, чтобы подтвердить операцию. Значение индекса, присвоенное элементу управления, равно 1. Первый нарисованный элемент управления имеет значение индекса 0.
Значение индекса каждого нового элемента массива совпадает с порядком его добавления в управляющий массив. Когда вы добавляете такой элемент управления, большинство визуальных свойств, таких как высота, ширина и цвет, копируются из первого элемента управления в массиве в новый элемент управления.
Добавить массив управления во время выполнения
Во время выполнения вы можете использовать операторы Load и Unload для добавления и удаления элементов управления из массива элементов управления. Однако добавляемый элемент управления должен быть элементом существующего массива элементов управления. Необходимо создать элемент управления со свойством Index (в большинстве случаев) равным 0 во время разработки, а затем использовать следующий синтаксис во время выполнения:
При загрузке нового элемента массива элементов управления большинство настроек свойств будут скопированы из существующего элемента массива с наименьшим индексом — в данном случае элемента с индексом 0. Поскольку параметры свойств Visible, Index и TabIndex не копируются автоматически в новые элементы в массиве элементов управления, чтобы сделать вновь добавленный элемент управления видимым, его свойству Visible необходимо присвоить значение True.
Обратите внимание , что Visual Basic выдаст ошибку при попытке использовать оператор Load для значения индекса, которое уже существует в массиве.
Важным моментом является то, что оператор Unload может использоваться для удаления всех элементов управления, созданных оператором Load. Однако Unload не может удалить элементы управления, созданные во время разработки, независимо от того, являются ли они частью массива элементов управления.
Схема управления: добавление и удаление элементов управления в массиве управления
Как добавлять и удалять элементы управления во время выполнения, показано на примере массива элементов управления, где элемент управления представляет собой кнопку выбора. В соответствии с этим примером пользователь может добавить кнопки выбора для изменения цвета фона поля изображения.
Как показано на рисунке 7.3, запустите форму, а затем нарисуйте на ней поле изображения, метку, две кнопки выбора и три кнопки управления.
События приложения массива управления
Далее необходимо добавить процедуры обработки событий для переключателя и командной кнопки. Запустите приложение после добавления объявления формы:
ДимМаксИдАсИнтегер
Все переключатели используют общую процедуру события Click:
PrivateSuboptButton_Click(IndexAsInteger)
picDisplay.BackColor=QBColor(Индекс 1)
EndSub
Добавьте новую кнопку выбора с помощью процедуры события Click командной кнопки «Добавить». В этом примере перед выполнением оператора Load код проверяет, загружено ли не более десяти кнопок выбора. После загрузки элемента управления его свойству Visible должно быть присвоено значение True.
PrivateSubcmdAdd_Click()
IfMaxId=0ThenMaxId=1 'Установить все дополнительные кнопки.
IfMaxId>8ThenExitSub 'Разрешено только десять кнопок.
MaxId=MaxId 1 'Количество кнопок увеличивается.
LoadoptButton(MaxId) 'Создаем новую кнопку.
optButton(0).SetFocus 'Сбросить параметры кнопки.
'Поместите новую кнопку ниже предыдущей кнопки.
optButton(MaxId).Top=optButton(MaxId-1)._
Топ 400
optButton(MaxId).Visible=True 'Показать новую кнопку.
optButton(MaxId).Caption=Option&MaxId 1
EndSub
Удалите переключатель с помощью процедуры события Click кнопки «Удалить»:
PrivateSubcmdDelete_Click()
IfMaxId<=1ThenExitSub 'Сохраните первые две кнопки.
UnloadoptButton(MaxId) 'Удалить последнюю кнопку.
MaxId=MaxId-1 'Количество кнопок уменьшается.
optButton(0).SetFocus 'Сбросить параметры кнопки.
EndSub
Завершите приложение с помощью процедуры события Click кнопки «Закрыть»:
PrivateSubcmdClose_Click()
Разгрузить меня
EndSub
->