(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Технические приемы работы с формами

Закрытие формы из другой формы:

Из одной формы частенько необходимо закрывать другую форму. Можно, конечно, перенести точку ввода на нее и выполнить команду и потом перенести точку ввода обратно на нашу форму:

Forms!frmПример.SetFocus

DoCmd.Close ' закрываем форму frmПример

Forms!frmНашаФорма.SetFocus

Приходилось встречать такой наворот - и он нормально работает :)

закрыть любую открытую форму, на вопрос о возможном сохранении изменений отвечая "да", не перенося на нее фокус ввода - 

        DoCmd.Close acForm, "frmПример", acSaveYes

вообще-то, правильно было бы сделать вот так:

    If IsLoaded("frmПример") Then DoCmd.Close acForm, "frmПример", acSaveYes

но для этого надо держать в отдельном модуле функцию IsLoaded:

Public Function IsLoaded(strName As String, Optional lngType As Long = acForm) As Boolean
    ' Is the specified form loaded?
    IsLoaded = (SysCmd(acSysCmdGetObjectState, lngType, strName) <> 0)
End Function
крайне рекомендую к включению этой функции во все Ваши проекты, кстати, она поставляется с учебной базой Борей (NorthWind ). Еще не раз пригодится. Сравните стандартную и опубликованные мною функции IsLoaded - оказывается, можно даже и здесь оптимизировать ;). Код взят с англоязычного ресурса....

' а вот и стандартная майкрософтовская функция

Function IsLoaded(strFormName As String) As Boolean

' IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strFrmName) = acObjStateOpen)

' Возвращает значения True, если форма открыта в режиме формы или таблицы

Const conObjStateClosed = 0

Const conDesignView = 0

If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then

    If Forms(strFormName).CurrentView <> conDesignView Then

        IsLoaded = True

    End If

End If

End Function

Обращение к форме, контролам на ней и процедурам событий в модуле формы из других форм:

Тут необходимо сказать пару вступительных слов слов про коллекцию объектов форм Forms. Все открытые формы автоматически добавляются Access'ом в эту коллекцию. Обратите внимание, в этой коллекции присутствуют только открытые на момент выполнения кода формы. Если форма еще не открыта, произойдет ошибка. Поэтому при любых обращениях к формам используйте для проверки функцию IsLoaded ( см.выше ).

Также используйте префикс форм frm.  Потом в коде удобно ориентироваться, также в окнах различных построителей видно - где форма (frm), где таблица (tbl), а где запрос (qry). Если форма подчиненная используйте префикс (fsub). Лично у меня во всех примерах так.

Различные варианты обращения к формам:

Forms!frmПример ' стандартная форма обращения - наиболее широко распространена

Forms![Форма Заказа]  ' если есть пробелы в названии формы - необходимо имя брать в кавычки. 

Категорически не рекомендую использовать пробелы в именах при именовании любых объектов!

Forms("frmПример") ' можно и так обращаться, это уже кому как нравится

Forms(0) ' можно обращаться и по индексу формы (это же все-таки коллекция).

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

Особенно рьяные фанаты программирования ;) не рекомендуют использовать русские имена объектов, но у меня за несколько лет проблем в Access не было. Я вот использую такие смешанные англо-русские имена.

Например, открыта текущая форма frmSimple и из нее установим фокус ввода на другую форму

Forms!frmПример.SetFocus

но учтите, что если в коде потом идет, например, DoCmd.Close, то закроется именно форма frmПример, так как команды программного кода исполняются уже в ней (где установлен фокус). Внимательно следите за переводом фокуса из формы в форму. 

Forms!frmПример.Requery ' обновим набор данных формы, находясь в форме frmSimple.

Чтобы получить список всех свойств и методов для работы с "удаленными" формами, напишите Me. (с точкой), выберите из выпадающего списка (Me. это обращение формы к самой себе) необходимый метод или свойство и перенесите его в обращение к удаленной форме.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 04.10.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft 365 Apps for business (corporate)
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Business Standard (corporate)
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Новые материалы
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100