Показать сообщение отдельно
Старый 26.10.2005, 09:41     # 2
LightImage
Junior Member
 
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96

LightImage Нимб уже пробиваетсяLightImage Нимб уже пробивается
При открытии формы проверяй, открыта ли она, и если да, то копируй форму, и эту копию уже и открывай. Вот код для создания копии формы:
Код:
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
Переменную saveCount, понятно, желательно объявить глобальной в той форме, которая производит открывание других форм.
__________________
1 миллибайт = 1/1024 байта

Последний раз редактировалось LightImage; 26.10.2005 в 09:47.
LightImage вне форума