| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Помогите создать 2 экземпляра формы. (VBA,Access)
Доброго времени суток.
Есть 2 формы. 1 вызывает 2 с неким параметром: DoCmd.OpenForm "ph_f_search_res_form", , , , , , se_list.Column(1) Все работает. Но если форма ph_f_search_res_form открыта, то нельзя вызвать еще один ее экземпляр. =( Это возможно ? Если возможно, то подскажите как, пожалуста.
|
|
|
|
|
# 2 |
|
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
При открытии формы проверяй, открыта ли она, и если да, то копируй форму, и эту копию уже и открывай. Вот код для создания копии формы:
Код:
Dim saveCount As Integer
Const frmname = "ph_f_search_res_form"
Dim newname As String
If Not IsLoaded(frmname) Then
DoCmd.OpenForm frmname, , , , , , se_list.Column(1)
Else
On Error Resume Next
saveCount = saveCount + 1
newname = frmname & "-interm-" & saveCount
DoCmd.DeleteObject acForm, newname
DoCmd.CopyObject , newname, acForm, frmname
DoCmd.OpenForm newname, , , , , , se_list.Column(1)
Next
Код:
Function IsLoaded(ByVal strFormName As String) As Boolean
' Возвращает значения 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
Код:
On Error Resume Next
Const frmname = "ph_f_search_res_form"
Dim newname As String
Dim i As Integer
For i = 1 To saveCount - 1
newname = frmname & "-interm-" & i
DoCmd.DeleteObject acForm, newname
Next
__________________
1 миллибайт = 1/1024 байта Последний раз редактировалось LightImage; 26.10.2005 в 09:47. |
|
|
|
|
# 3 | |
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Неработает =(
Говорит что не может найти свеже скопированый обьект. Цитата:
|
|
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
А вообще объект копируется? Отладчиком пройди, посмотри, создается копия вообще, и на какой строке ошибка, вдруг это при удалении возникает, если On Error Resume Next не сказал =)
Если при открытии копии ошибка, то м.б. надо закрытую форму копировать, хотя у меня в Access 2002 можно и открытую обрабатывать. Попробуй копировать нужную форму при открытии открывающей, а потом делать копию уже с этой копии. Вообще то Access какой версии используешь?
__________________
1 миллибайт = 1/1024 байта |
|
|
|
|
# 5 |
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
MS Office Access 2003.
Сейчас попробую выяснить... Дико извиняюсь - бытавая, я прошу прощения, задолбаность. Перепутал все что только можно. =) Уже все работает. Проблема была с удалением еще не созданной формы. формы. Еще раз извиняюсь за собственную невнимательность.
|
|
|
|
|
# 6 | ||
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Вопрос по закрытию формы:
Нужно удалять копии когда закрывается эта самая копия. тоесть она дролжна инициировать свое удаление. Написал: Цитата:
Цитата:
|
||
|
|
|
|
# 7 |
|
::VIP::
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310
![]() ![]() ![]() ![]() ![]() |
Если я правильно помню - форма аксесса неразрывно связанна с неким дата-сорсом - таблицей или рекордсетом. (1) не факт что этот объект копируется при копировании формы - можето он эксклюзивный ? (2) в момент закрытия формы данный объект убивается, при попытке закрытия копии ... могет и заглючить. А поможет ли древнехалявный On Error Resume Next ?
|
|
|
|
|
# 8 | ||||
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Цитата:
Цитата:
Цитата:
Насколько я понял, для того что бы обработка ошибки пропускалась ф-я должна выглядеть так ? Цитата:
С уважением. Ворон. |
||||
|
|
|
|
# 9 |
|
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
Попробуй удалять в обработчике события "Закрытия":
Код:
Private Sub Form_Close()
Dim para, tmp As String
tmp = Form.OpenArgs
para = Split(tmp, "|") 'во втором элементе получившегося массива - номер копии
If Not para(1) = 0 Then 'тоесть если это не оригинал - удаляем
killform ("ph_f_search_res_form-interm-ph_f-" & para(1))
End If
End Sub
Код:
DoCmd.OpenForm newname, , , , , acDialog, se_list.Column(1) ' Управление на следующую строку передается после закрытия ' формы newname DoCmd.DeleteObject acForm, newname
__________________
1 миллибайт = 1/1024 байта |
|
|
|
|
# 10 |
|
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Как модальное окно я форму открывать не могу.
Дело в том что содержимое форм пользователь хочет сравнивать, а если окно модально - работать с другими окнами не получится.При событии Close результат тот же - прерывается на DoCmd.Close acForm, str С той же ошибкой. |
|
|
|
|
# 11 |
|
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
Так DoCmd.Close в событии закрытия нельзя вызывать =)
Удалить форму из её же кода вряд ли удастся имхо. Зачищай лишние экземпляры перед открытием нужной формы. В цикле по именам копий проверяй, открыта ли копия, если да, удаляй. А имена открытых копий можно хранить в динамическом массиве
__________________
1 миллибайт = 1/1024 байта |
|
|