|
|
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Замучился совсем, не получается, помогите если можете. Есть функция в модуле: 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 Может кто подскажет как выйти из ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 15:47:52 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Или я чего-то не понимаю? 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:31:19 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Roma RИли я чего-то не понимаю? frmListBlankNew и frmNew - это разные формы (переменные)? Прошу прощения, это одно и тоже. Хотел укоротить код, чтобы легче читалось, но что-то упустил. Roma R Можно поступить например так. Создать в модуле Общую переменную (например Public intOM as long) (или создать таблицу для хранения этого значения, что надежнее). В функции записать вместо frmListBlankNew!intOpenMode = intOpenMode intOM=intOpenMode а в Form_Load() d yfxtkt добавить Me.intOpenMode=intOM Не пройдет, хотя конечно можно будет извернуться, хотелось бы по-проще. Дело в том, одновременно могут быть открыты несколько форм. И нет гарантии, что не успев загрузиться первый экземпляр, будет вызвана повторно функция FormTemplateOpen, которая успеет поменять значение intOM до получения старого значения первым экземпляром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:56:10 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
>нет гарантии, что не успев загрузиться первый экземпляр, будет вызвана повторно функция FormTemplateOpen, которая успеет поменять значение intOM до получения старого значения первым экземпляром. Не согласен. Значение переменной присваивается полю в Form_Load() (Me.intOpenMode=intOM) и далее используется значение из поля, а то что хранится в переменной уже не имеет значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:43:19 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
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 второго экземпляра, но дальше уже не важно ... Может кто рассудит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:59:51 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Такого быть не может Чтобы так сделать надо открыть два параллельных процесса при помощи API-функций. У тебя в программе такого нет. Поэтому порядок выполнения будет строго последовательным 1) Вызывается первый экземпляр в режиме 1: Call FormTemplateOpen (1) ' intOM=1 2) возникает Load первого экземпляра, intOM =1 3) Call FormTemplateOpen (2) ' intOM=2 4) возникает Load второго экземпляра Чтобы убедиться выполни программу в пошаговом режиме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:10:09 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
замени Dim frmNew As New Form_FormTemplate ' присвоение значения элементи типа "поле", ' расположенной на форме: frmListBlankNew!intOpenMode = intOpenMode на Dim frmNew As Form_FormTemplate Set frmNew = New Form_FormTemplate ' присвоение значения элементи типа "поле", ' расположенной на форме: frmListBlankNew!intOpenMode = intOpenMode и не мучайся (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:12:14 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
>Victosha И что это меняет? Все равно событие Load формы произойдет до выполнения оператора frmListBlankNew!intOpenMode = intOpenMode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:18:09 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Объяви переменную iOM as int на уровне стандартного модуля, клади опенмоде туда, а не в форму. В форме на on open/load/current перекладывай содержимое этой переменной в местную, описанную на уровне модуля формы, или в поле на форме. Вот и все. Между iOM=1 frmNew.Visible = True и private sub fomr_load() Me.intOpenMode = IOM end sub iOM со стороны не поменяется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:23:19 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
авторМожет кто рассудит? А протестировать лома? Делаем тестовую форму "NEW": !cParam - поле Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ?TestNew и видем открытие 2-х форм с неким интервалом, в контролах которых стоят переданные значения. т.е. frmNew.Visible отработает только после завершения загрузки ("в одном потоке"), а до этого поток будет ждать завершения Form_Open ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:23:24 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
тьфу, опоздал несколько раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:26:08 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Roma RТакого быть не может Чтобы так сделать надо открыть два параллельных процесса при помощи API-функций. У тебя в программе такого нет. Поэтому порядок выполнения будет строго последовательным 1) Вызывается первый экземпляр в режиме 1: Call FormTemplateOpen (1) ' intOM=1 2) возникает Load первого экземпляра, intOM =1 3) Call FormTemplateOpen (2) ' intOM=2 4) возникает Load второго экземпляра Чтобы убедиться выполни программу в пошаговом режиме Сделал, Вы правы. Но когда завел новую переменную, то ситуация не изменилась, осталась как в самом начале. Неужели придется во временную таблицу класть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:58:22 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Victoshaзамени Dim frmNew As New Form_FormTemplate ' присвоение значения элементи типа "поле", ' расположенной на форме: frmListBlankNew!intOpenMode = intOpenMode на Dim frmNew As Form_FormTemplate Set frmNew = New Form_FormTemplate ' присвоение значения элементи типа "поле", ' расположенной на форме: frmListBlankNew!intOpenMode = intOpenMode и не мучайся (с выражением лица) Пробовал и так делать, тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:59:20 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
assa авторМожет кто рассудит? А протестировать лома? Делаем тестовую форму "NEW": ................ Спасибо, уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:01:49 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Пояснение assa сказал следующее: вот этот код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. в самостоятельный саб нутри своей формы - типа Sub CheckMode и пиши так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. (и не мучайся) (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:33:07 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
блин.... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:34:13 |
|
||
|
Не присвоивает значения элементам экземпляра формы после создания, но до открытия???
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо всем за помощь! Если все собрать, то получился примерно такой итоговый вариант: В модуле формы: 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) Еще раз всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 11:05:42 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32692588&tid=1671800]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 360ms |

| 0 / 0 |
