Технічні прийоми роботи з формами, MS Office, Програмні керівництва, статті

Закриття форми з іншої форми:


З однієї форми частенько необхідно закривати іншу форму. Можна, звичайно, перенести точку введення на неї і виконати команду і потім перенести точку введення назад на нашу форму:


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. це звернення форми до самої себе) необхідний метод або властивість і перенесіть його в обіг до віддаленої формі.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*