Передача значений при работе с формами - 2
В предыдущей заметке я описал относительно простой способ передачи и возврата параметров из формы. Однако, простота - единственное его преимущество. Неудобен он тем, что передавать и возвращать все параметры приходится через единственную строку (OpenArgs туда и Tag обратно). Кроме того, форма выбора обязательно должна быть модальной, а это не всегда удобно для пользователя, так как она часто закрывает основную форму и не может быть уменьшена или увеличена путём изменения размеров своего окна.
Попробуем решить проблему иначе. Сам подход описан в заметке, посвященной использованию формы вместо выпадающего списка. Для большей безопасности и удобства я добавил две проверки.
Одна не позволяет просто открыть форму из окна базы данных или с помощью DoCmd.OpenForm. Это связано с тем, что в зависимости от устанавливаемых параметров, свойства и внешний вид формы могут значительно меняться и использовать её обычным способом просто не имеет смысла.
Другая проверка не даёт открыть второй экземпляр формы, не закрыв при этом первый. Это необходимо, так как открытие и закрытие формы, а также установка и считывание параметров полностью сосредоточены в одной функции. Если создать для этой цели отдельный класс, то использовать форму выбора можно сколько угодно раз одновременно путём создания экземпляров этого класса.
Как всё это делается лучше посмотреть в примере. Он в формате Access'97, но легко преобразуется в более поздние версии.
|