Индексированные элементы управления
(автор: Есин И. В. email: [email protected])
О чём …
Рано или поздно серьёзно осваивающий программирование, изучающий первую
систему программирования столкнётся с необходимостью использовать
массивы. Каждый элемент массива определяется своим индексом, которое
есть неотрицательное целое число. Каждый массив определяется своим
именем, которое не противоречит правилу построения имён для переменных.
Ещё, говоря о массивах, следует подчеркнуть, что все элементы массива
обязательно однородны. В контексте сказанного в VB различают, например,
массивы элементов управления. Хотя индексированные элементы управления
с общим именем в соответствие с аналогией “обычных” массивов не всегда
можно назвать массивом элементов управления, в статье они всё же будут
называться “массивы элементов управления”, что довольно распространено.
В статье на основании двух примеров рассматриваются многие преимущества
использования массивов элементов управления (в надлежащих случаях),
показывается каким образом можно создавать массивы и как обращаться к их
элементам. Статья не претендует дать полнейшее истолкование массивов
элементов управления. Знание “обычных” массивов необязательно.
Пример первый
или
“с претензией называться игрой”
Рассмотрим задачу, которая ясно выделяет многие преимущества
использования массива объектов. Выводы позволят сделать два подхода к
её решению …
На форме уже имеется картинка PictureBox и девять равновеликих кнопок
CommandButton. Имена объектов не изменены, а в картинку загружена
фотография.
Причём автор идеи написал уже такой программный код:
Private Sub Form_Load()
‘ надпись кнопки – произвольная цифра
Command1.Caption = Int(9 * Rnd)
Command2.Caption = Int(9 * Rnd)
Command3.Caption = Int(9 * Rnd)
Command4.Caption = Int(9 * Rnd)
Command5.Caption = Int(9 * Rnd)
Command6.Caption = Int(9 * Rnd)
Command7.Caption = Int(9 * Rnd)
Command8.Caption = Int(9 * Rnd)
Command9.Caption = Int(9 * Rnd)
End Sub
Из которого следует, что после открытия приложения надписи кнопок –
цифры полученные псевдослучайно.
Необходимо открыть картинку убирая кнопку за кнопкой. Причём начинать
надо с кнопки у которой цифра наибольшая. Затем выбирается кнопка у
которой тоже цифра наибольшая, но уже среди оставшихся и т. д.. Таким
образом, последняя кнопка – кнопка с наименьшей цифрой.
Долго …
Если писать обработчик щелчка по кнопке Command1, то может получится
так:
Private Sub Command1_Click()
If Command1.Caption 10 Then Label1(skolko).Visible = True
End If
Select Case skolko ‘ проверка на выигрыш и проигрыш
Case 0
MsgBox “Вы выиграли!”: End
Case 10
MsgBox “Вы проиграли.”: End
End Select
End Sub
Завершим рассмотрение данного примера сравнением. Проект в первом
случае имеет размер 2,46 Кб, в последнем – 8,57 Кб. Однако
откомпилированные, исполняемые модули по размеру одинаковы …
Другой вопрос: а какова разница затраченного времени в обоих случаях,
если второй писать “с нуля”? Ответ, понятно, субъективен и зависит во
многом от того насколько хорошо вы знакомы со средой разработки,
“видите” реализацию кода и насколько быстро набираете его.
Пример последний
или
почему “индексированные элементы управления”?
Чтобы понять, почему корректнее в некоторых случаях говорить
“индексированные элементы управления c общим именем”, а не “массив
элементов управления” рассмотрим следующий небольшой пример.
На форме брошены шесть кнопок, надписи которых заменены звёздочками:
Кнопки имеют общее имя M, а индексы у всех разные: 204, 192, 209, 67,
200, 194 (в порядке расположения на форме слева направо). Отсюда
понятно, что позиция на экране элементов управления не имеет значения,
даже если у них общее имя.
А вот и готовый программный код:
Private Sub M_Click(Index As Integer)
M(Index).Caption = Chr(Index) ‘ надпись кнопки – символ номер index
взятый из таблицы Ascii-символов
End Sub
Что же выполнит компьютер с помощью этих строчек? Во-первых, это
процедура обработки щелчка по одной из кнопок у которой имя M, а индекс
Index (равен 67, 192, 194, 200, 204 или 209). Во-вторых, щёлкая по всем
кнопкам прочитаем: “МАССИВ”.
Далее в эту же процедуру впишите:
M(68).Caption=”Элемент с индексом 68 не существует”
Нажмите F5. Щёлкните по одной любой кнопке. Получится ошибка:
“элемента управления с таким индексом не существует”. То есть,
обращаться к ранее несозданным элементам управления не просто не имеет
смысла, а вызывает крах программы. Хотя в обыкновенном массиве M(67 to
209), элемент M(68) будет существовать вне зависимости от того придавали
ли мы какое-то значение ему или нет. Как видите определения массива
элементов управления и “обычного” массива различны.
Назовём всё своими именами
Итак, если уж многие и называют, то чему объясняется в статье “массивы
элементов управления”, сформулируем определение массивов элементов
управления. Кроме того, обобщим сказанное и добавим новое.
Что?
Итак, массив элементов управления состоит из элементов управления
(элементы массива), которые создаются при построении визуальной части
интерфейса пользователя и/или догружаются программно (могут быть
динамическими). Каждый элемент массива имеет уникальный идентификатор
называемый индексом, который есть целое неотрицательное число, не
превышающее 32767 (зависит от ОЗУ). Индексы массива необязательно
чередуются. Позиция элементов массива произвольная.
Как?
Массив элементов можно создать, бросая один и тот же интересующий
инструмент на форму и изменяя свойство Index. Кроме того, если
существует хотя бы один элемент управления с численным значением
свойства Index, то, возможно, догрузить новые элементы массива,
используя, оператор Load. Удаляются догруженные элементы массива с
помощью оператора Unload.
Обращение к свойствам элемента массива осуществляется аналогично тому,
как обращаются к свойствам объекта, не имеющего численного значения
свойства Index.
Нашли опечатку? Выделите и нажмите CTRL+Enter