powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
17 сообщений из 17, страница 1 из 1
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692157
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замучился совсем, не получается, помогите если можете.
Есть функция в модуле:

Public Function FormTemplateOpen (ByVal intOpenMode As Integer)
' Аргумент:
' intOpenMode - Режим открытия: 0, 1 или 2 - не важно

Dim frmNew As New Form_FormTemplate

' присвоение значения элементи типа "поле",
' расположенной на форме:
frmListBlankNew!intOpenMode = intOpenMode

' Открыть экземпляр:
frmNew.Visible = True
Set frmLstBlankNew = Nothing
End Function

Есть форма FormTemplate:

Private refToMe As Form

Private Sub Form_Open(Cancel As Integer)
' Чтобы сразу не закрылась по открытию
Set refToMe = Me
End Sub

Private Sub Form_Load()

' ???????????!!!!!!!!!!!!!!!!!
' Вот здесь пишет, что объект не определен
' и соответственно, если закоментировать MsgBox Me.intOpenMode,
' на Select Case Me.intOpenMode всегда
' уходит на Case Else, но при появлении экземпляра формы на экране
' в поле intOpenMode находится необходимое значение.
' А мне нужно до открытия экземпляра подготовить
' состояние элементов в форме в соответсвии Me.intOpenMode

MsgBox Me.intOpenMode

Select Case Me.intOpenMode
Case 0
' ...............
Case 1
' ...............
Case 2
' ...............
Case Else
' ...............
End Select
End Sub

Может кто подскажет как выйти из ситуации?
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692281
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я чего-то не понимаю?
frmListBlankNew и frmNew - это разные формы (переменные)?

Эсли это просто опечатка (т.е. это одна переменная frmNew), то ...
Вы используете раннее связывание (Dim frmNew As New Form_FormTemplate), поэтомы загрузка формы происходит при первом обращении к форме (frmListBlankNew!intOpenMode = intOpenMode). При этом сначало происходит события Load и Open формы, а только потом полю присваивается значение переменной intOpenMode.

Можно поступить например так. Создать в модуле Общую переменную (например Public intOM as long) (или создать таблицу для хранения этого значения, что надежнее). В функции записать вместо
frmListBlankNew!intOpenMode = intOpenMode

intOM=intOpenMode

а в Form_Load() d yfxtkt добавить
Me.intOpenMode=intOM
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692354
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma RИли я чего-то не понимаю?
frmListBlankNew и frmNew - это разные формы (переменные)?
Прошу прощения, это одно и тоже. Хотел укоротить код, чтобы легче читалось, но что-то упустил.

Roma R
Можно поступить например так. Создать в модуле Общую переменную (например Public intOM as long) (или создать таблицу для хранения этого значения, что надежнее). В функции записать вместо
frmListBlankNew!intOpenMode = intOpenMode
intOM=intOpenMode
а в Form_Load() d yfxtkt добавить
Me.intOpenMode=intOM
Не пройдет, хотя конечно можно будет извернуться, хотелось бы по-проще.
Дело в том, одновременно могут быть открыты несколько форм. И нет гарантии, что не успев загрузиться первый экземпляр, будет вызвана повторно функция FormTemplateOpen, которая успеет поменять значение intOM до получения старого значения первым экземпляром.
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692503
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>нет гарантии, что не успев загрузиться первый экземпляр, будет вызвана повторно функция FormTemplateOpen, которая успеет поменять значение intOM до получения старого значения первым экземпляром.

Не согласен. Значение переменной присваивается полю в Form_Load() (Me.intOpenMode=intOM) и далее используется значение из поля, а то что хранится в переменной уже не имеет значения
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692540
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma R>нет гарантии, что не успев загрузиться первый экземпляр, будет вызвана повторно функция FormTemplateOpen, которая успеет поменять значение intOM до получения старого значения первым экземпляром.

Не согласен. Значение переменной присваивается полю в Form_Load() (Me.intOpenMode=intOM) и далее используется значение из поля, а то что хранится в переменной уже не имеет значения

По-моему может возникнуть ситуация:
1) Вызывается первый экземпляр в режиме 1:
Call FormTemplateOpen (1) ' intOM=1

2) тут же, пока еще не загрузился первый экземпляр (еще не было Load):
Call FormTemplateOpen (2) ' intOM=2

3) возникает Load первого экземпляра, но intOM уже равен 2 !!!
т.е. Me.intOpenMode=2, хотя должен быть 1

4) возникает Load второго экземпляра, но дальше уже не важно ...

Может кто рассудит?
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692574
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такого быть не может
Чтобы так сделать надо открыть два параллельных процесса при помощи API-функций.
У тебя в программе такого нет. Поэтому порядок выполнения будет строго последовательным

1) Вызывается первый экземпляр в режиме 1:
Call FormTemplateOpen (1) ' intOM=1
2) возникает Load первого экземпляра, intOM =1


3) Call FormTemplateOpen (2) ' intOM=2
4) возникает Load второго экземпляра

Чтобы убедиться выполни программу в пошаговом режиме
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692580
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замени

Dim frmNew As New Form_FormTemplate

' присвоение значения элементи типа "поле",
' расположенной на форме:
frmListBlankNew!intOpenMode = intOpenMode

на

Dim frmNew As Form_FormTemplate

Set frmNew = New Form_FormTemplate


' присвоение значения элементи типа "поле",
' расположенной на форме:
frmListBlankNew!intOpenMode = intOpenMode


и не мучайся


(с выражением лица)
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692588
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Victosha

И что это меняет? Все равно событие Load формы произойдет до выполнения оператора
frmListBlankNew!intOpenMode = intOpenMode
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692596
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объяви переменную iOM as int на уровне стандартного модуля, клади опенмоде туда, а не в форму. В форме на on open/load/current перекладывай содержимое этой переменной в местную, описанную на уровне модуля формы, или в поле на форме. Вот и все. Между

iOM=1
frmNew.Visible = True

и

private sub fomr_load()
Me.intOpenMode = IOM
end sub

iOM со стороны не поменяется...
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692597
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет кто рассудит?

А протестировать лома?

Делаем тестовую форму "NEW":
!cParam - поле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Compare Database
Option Explicit

Private Self As Form

Private Sub Form_Open(Cancel As Integer)
Dim i As Long
    Set Self = Me
 'модель задержки открытия 
    For i =  0  To  10000 
        DoEvents
    Next i
 'модель задержки открытия 
    Me!cParam = gParam
End Sub
пишем тестовый модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Option Compare Database
Option Explicit
Public gParam

Public Function FormTemplateOpen(ByVal intOpenMode As Integer)

Dim frmNew As Form_NEW   'New Form_NEW 
    gParam = intOpenMode
    Set frmNew = New Form_NEW
    frmNew.Visible = True
    Set frmNew = Nothing
End Function

Public Function TestNew()
    FormTemplateOpen  1 
    FormTemplateOpen  2 
End Function
набираем в дебуггере:
?TestNew
и видем открытие 2-х форм с неким интервалом, в контролах которых стоят переданные значения.
т.е. frmNew.Visible отработает только после завершения загрузки ("в одном потоке"), а до этого поток будет ждать завершения Form_Open
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692601
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, опоздал несколько раз
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692649
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma RТакого быть не может
Чтобы так сделать надо открыть два параллельных процесса при помощи API-функций.
У тебя в программе такого нет. Поэтому порядок выполнения будет строго последовательным

1) Вызывается первый экземпляр в режиме 1:
Call FormTemplateOpen (1) ' intOM=1
2) возникает Load первого экземпляра, intOM =1


3) Call FormTemplateOpen (2) ' intOM=2
4) возникает Load второго экземпляра

Чтобы убедиться выполни программу в пошаговом режиме

Сделал, Вы правы. Но когда завел новую переменную, то ситуация не изменилась, осталась как в самом начале. Неужели придется во временную таблицу класть.
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692653
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victoshaзамени

Dim frmNew As New Form_FormTemplate

' присвоение значения элементи типа "поле",
' расположенной на форме:
frmListBlankNew!intOpenMode = intOpenMode

на

Dim frmNew As Form_FormTemplate

Set frmNew = New Form_FormTemplate


' присвоение значения элементи типа "поле",
' расположенной на форме:
frmListBlankNew!intOpenMode = intOpenMode


и не мучайся


(с выражением лица)

Пробовал и так делать, тоже самое.
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692656
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assa авторМожет кто рассудит?

А протестировать лома?

Делаем тестовую форму "NEW":
................



Спасибо, уже.
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692695
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пояснение

assa сказал следующее:

вот этот код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select Case Me.intOpenMode
Case  0  
 ' ...............  
Case  1  
 ' ...............  
Case  2  
 ' ...............  
Case Else
 ' ...............  
End Select
End Sub
выдели
в самостоятельный саб нутри своей формы - типа Sub CheckMode
и пиши так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim frmNew As New Form_FormTemplate

 ' присвоение значения элементи типа "поле",  
 ' расположенной на форме: 
frmListBlankNew!intOpenMode = intOpenMode

на

Dim frmNew As Form_FormTemplate

Set frmNew = New Form_FormTemplate

 ' присвоение значения элементи типа "поле",  
 ' расположенной на форме: 
frmListBlankNew!intOpenMode = intOpenMode

frmNew.CheckMode

(и не мучайся)



(с выражением лица)
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32692696
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim frmNew As Form_FormTemplate

Set frmNew = New Form_FormTemplate

 ' присвоение значения элементи типа "поле",  
 ' расположенной на форме: 
frmListBlankNew!intOpenMode = intOpenMode

frmNew.CheckMode

(с выражением лица)
...
Рейтинг: 0 / 0
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
    #32693215
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо всем за помощь!
Если все собрать, то получился примерно такой итоговый вариант:

В модуле формы:
Sub FormOpenModeCheck(ByVal intFLTOM As Integer)

' Режим открытия формы ListTempLate
' Поле Me.intOpenMode в данном случае не нужно,
' но оно может пригодится в другом месте, например,
' для анализа в событиях кнопок
Me.intOpenMode = intFLTOM

Select Case Me.intOpenMode
Case 0 ' свободный
.......................
Case 1 ' вызывается в отдельной форме для выбора элемента
.......................
Case 2 ' открывается в качестве подчиненной формы
.......................
Case Else
MsgBox "Неверно задан режим открытия экземпляра формы List!" _
+ Chr(13) + "(OpenMode=" _
+ IIf(IsNull(Me.intOpenMode), "Null", Str(Me.intOpenMode)) + ")"
Call buttonFormClose_Click
End Select
End Sub

В обычном модуле:
Public Function FormListOpen (ByVal intOpenMode As Integer)
Dim frmNew As New Form_ListTemplate
frmNew.FormOpenModeCheck (intOpenMode)
frmNew.Visible = True
Set frmNew = Nothing
End Function

Пример открытия экземпляра формы:
Call FormListOpen(0)

Еще раз всем спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]