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



    
rambler's top100 Rambler's Top100