Цикл ЭЛЕМЕНТЫ
Цикл ЭЛЕМЕНТЫ позволяет перечислить элементы управления, на форме. Во время показа формы цикл перебирает как статические элементы (поля формы), так и добавленные динамически. Вне показа – только статические.
ЦИКЛ ЭЛЕМЕНТЫ(И_ЭЛЕМЕНТЫ: форма; ПЕРЕМ И_ЭЛЕМЕНТ: элемент)
Параметры
- форма
- Интерфейс формы, поддерживающей элементы управления.
- элемент
- Переменная-счетчик для получения интерфейса очередного элемента управления.
При переборе можно применять проверку типа объекта и запрос объекта конкретного типа для переменной интерфейса И_ЭЛЕМЕНТ.
Т.к. тип счетчика И_ЭЛЕМЕНТ совместим с типом любого элемента управления (все они реализуют этот интерфейс), то циклу может быть передана переменная типа КНОПКА, например. При этом, перебираться будут только элементы указанного типа и его производных. Т.к. счетчику цикла устанавливаются значения путем копирования, то получаемые в цикле значения не будут связаны с реальными элементами управления, а будут их копиями. Бессмысленно изменять значения полей счетчика и/или вызывать метод ОБНОВИТЬ, например. См. подробнее в Примере 3.
Пример 1 (используются идентификаторы):
ТИП МойДиалог(ДИАЛОГ)
[
РЕДАКТОР: Редактор1 = [ /*...*/ идент = "поле_ввода" /*...*/ ];
ТАБЛИЦА: Таблица1 = [ /*...*/ идент = "табл" /*...*/ ];
КНОПКА: Кнопка1 = [ /*...*/
текст = "Очистить",
нажатие = {НажатаОчистить} ];
ФУНКЦИЯ ОчиститьТаблицу(ПЕРЕМ ТАБЛИЦА: таблица)
таблица.кол_строк = 0
СБРОС(таблица.элементы)
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ОчиститьЭлемент(И_ЭЛЕМЕНТ: эл)
ВЫБОР (эл.ИДЕНТ) // один из вариантов выбора действий - по идентификатору
// здесь используем ссылки на реальные элементы управления в диалоге, не копии
#"поле_ввода": ОБЪЕКТ(эл, РЕДАКТОР).текст = ""
#"табл" : ОчиститьТаблицу(ОБЪЕКТ(эл, ТАБЛИЦА))
КОНЕЦ_ВЫБОРА
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ОчиститьВсе
ПЕРЕМ И_ЭЛЕМЕНТ: эл
ЦИКЛ ЭЛЕМЕНТЫ(САМ, эл)
ОчиститьЭлемент(эл)
КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ НажатаОчистить(ПЕРЕМ КНОПКА: кнопка)
ОчиститьВсе
ОБНОВИТЬ
КОНЕЦ_ФУНКЦИИ
]
Пример 2 (используется запрос типа):
ТИП МояТаблица(ТАБЛИЦА)[ /*...*/ ]
ТИП МойДиалог(ДИАЛОГ)
[
РЕДАКТОР: Редактор1 = [ /*...*/ ];
ТАБЛИЦА: Таблица1 = [ /*...*/ ];
КНОПКА: Кнопка1 = [ /*...*/
текст = "Очистить таблицы",
нажатие = {НажатаОчиститьТаблицы} ];
МояТаблица: Таблица2 = [ /*...*/ ];
ФУНКЦИЯ НажатаОчиститьТаблицы(ПЕРЕМ КНОПКА: кнопка)
ПЕРЕМ И_ЭЛЕМЕНТ: эл
ЦИКЛ ЭЛЕМЕНТЫ(САМ, эл) // цикл находит и очищает таблицы
ЕСЛИ ОБЪЕКТ(эл, &ТАБЛИЦА) ТО // используем проверку типа
ПЕРЕМ& табл = ОБЪЕКТ(эл, ТАБЛИЦА) // используем именованную ссылку
// здесь используем ссылку на реальную таблицу в диалоге, не копию
табл.кол_строк = 0
СБРОС(табл.элементы)
табл.ОБНОВИТЬ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ
]
Пример 3 (используется счетчик объектного типа):
ТИП МойДиалог(ДИАЛОГ)
[
РЕДАКТОР: Редактор1 = [ /*...*/ ];
РЕДАКТОР: Редактор2 = [ /*...*/ ];
РЕДАКТОР: Редактор3 = [ /*...*/ ];
КНОПКА: Кнопка1 = [ /*...*/
текст = "Проверить поля",
нажатие = {НажатаПроверитьРедакторы} ];
ФУНКЦИЯ НажатаПроверитьРедакторы(ПЕРЕМ КНОПКА: кнопка)
ПЕРЕМ ЦЕЛОЕ: кол_пустых = 0
ПЕРЕМ РЕДАКТОР: ред
ЦИКЛ ЭЛЕМЕНТЫ(САМ, ред) // цикл перебирает только редакторы
// здесь ред - копия, можно читать, но изменять бессмысленно
ЕСЛИ ред.текст = "" ТО
кол_пустых++
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
ЕСЛИ кол_пустых > 0 ТО
СООБЩЕНИЕ("Осталось заполнить " + СТР(кол_пустых) + " поля.")
КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
]