Форма вместо раскрывающегося списка
В этой заметке я хочу продемонстрировать два новых для меня подхода в области построения пользовательского интерфейса. Точнее, они относятся к проблеме улучшения стандартного раскрывающегося списка (Combo Box). Пример для Access'97 находится здесь. Сначала рассмотрим реализацию замены раскрывающегося списка на форму. Она представляет собой попытку использовать для этой цели комбинацию поля ввода, кнопки и формы. Форма открывается при нажатии на кнопку непосредственно под полем, имитируя таким образом поведение раскрывающегося списка. Не вдаваясь в подробности, замечу, что удовлетворительный результат (нужное место открытия, тонкая граница, отсутствие заголовка окна и т.п.) можно получить только путем использования большого числа функций Windows API. Я не большой специалист в этой области, поэтому сделал всё наверняка не самым оптимальным образом, и, кроме того, пока не стал оформлять всё как отдельную функцию или какой-либо другой структурный элемент программы. Возможно я сделаю это позднее. Другой новый подход относится к реализации передачи параметров между формой и программой, которая её контролирует. Сначала создаётся новый экземпляр формы как объектная переменная: Dim frmChoose As New Form_choose_color Затем с её окном выполняются описанные выше манипуляции, после чего производится начальная инициализация значения, возвращаемого формой. Оно представляет собой свойство (Property), определяемое в модуле формы: Private lngValue As Long Таких свойств может быть несколько, в зависимости от потребностей программы. В данном случае присвоение значения свойству устанавливает текущую запись в форме: frmChoose.ChoosedValue = Nz(Me!i_color_id, 0) frmChoose.Visible = True После чего форма делается видимой. Так как форма открывается не командой DoCmd.OpenForm "choose_color", , , , , acDialog то управление в конце концов передаётся следующей строке программы. Это вынуждает выполнять в цикле простейшую проверку состояния формы: While frmChoose.Visible = True DoEvents Wend Когда пользователь выберет значение (или откажется от выбора), форма будет снова сделана невидимой, выполнение программы продолжится и мы сможем получить возвращаемое формой значение, после чего её можно закрыть окончательно: Me!i_color_id = frmChoose.ChoosedValue Set frmChoose = Nothing
Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=6444 |