Древовидный (многоуровневый) список на основе стадартного ListBox.

Источник: Accessoft

В этой статье рассказывается о необычном применении всем известного контрола - стандартного ListBox. Его удалось модифицировать таким образом, что получилось нечто, подобное контролу TreeView - древовидному списку. Идея создания такого списка появилась совершенно неожиданно (для меня во всяком случае). Казалось бы: - ну что еще можно выжать из стандартного ListBox? Уж излазили и избороздили его вдоль и поперек. Однако оказалось, что можно.

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

в простейшем исполнении, это могут быть просто несколько списков, наложенных друг на друга, и поочередно проявляемых через свойство Visible. В этом случае нужно будет придумывать процедуру, которая на событие, например «двойной клик» по одному из списков, скрывает остальные. Думаю, такое по силам даже начинающим Access - дизайнерам.

второй способ требует некоторой подготовки программирования VBA - тут используется один список, динамически заполняемый. Содержимое будет зависеть от значения списка в момент клика. Реализация основана на использовании UNION запросов. Можно было конечно и просто заполнять список с помощью AddItem, но идея использования запросов показалась наиболее привлекательной.

Прокомментирую слегка второй способ:

Запрос UNION, как следует из названия, запрос на объединение. Под объединением в данном случае будет пониматься объединение содержимого нескольких таблиц, откуда берутся данные для списка. ChrW(9660, 9658) - это коды символов (треугольников). Один из них вертикальный, другой горизонтальный. В принципе Вы можете изменить их на любые другие. Для этого Пуск - Все программы - Стандартные - Служебные - Таблица символов. Выбираем символ, смотрим, какой у него код, и вставляем в текст модуля.

В профессиональных приложениях обычно добавляют интерфейс навигации при помощи «горячих клавиш». Это действительно удобнее и во многих случаях быстрее, чем кликать мышью. В данном примере применена навигация при помощи клавиш, к которым мы привыкли, работая с «настоящим» TreeView.

Думается, что решение еще не окончательное. Можно, например, оформить контрол как класс, ввести события добавления, удаления "узла" и прочии атрибуты классического TreeView. Если задуматься над вопросом создания спец. символов, то можно, наверное, сделать свои символы, похожие на иконки.

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

Пример, как это все работает, Вы можете скачать ниже.


Страница сайта http://185.71.96.61
Оригинал находится по адресу http://185.71.96.61/home.asp?artId=7805