Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: открыть и дождаться закрытия формы типа WaitFor... Добавлено: 18.05.04 19:21  

Автор вопроса:  __Сергей__

Может кто подскажет

как запустить форму и дождаться её закрытия типа WaitForProcessToEnd

За ранее благодарен

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Kodo



Разработчик Offline Client

ICQ: 293048085 

Вопросов: 37
Ответов: 457
 Профиль | | #1 Добавлено: 18.05.04 19:28

Не доходит что ты имеешь в виду.

Это чтоли? :

frmMain.Show vbModal

Do while not frmMain.Visible=False

DoEvents

Loop

msgbox "Форма закрылась !"

Или я не так понял?

Ответить

Номер ответа: 2
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #2 Добавлено: 18.05.04 19:30

Я тоже не понял. Иными словами: форма твоя или чужая??:)

Ответить

Номер ответа: 3
Автор ответа:
 __Сергей__



Вопросов: 7
Ответов: 23
 Профиль | | #3 Добавлено: 18.05.04 19:39

вообщем проблема такая - из цикла формы1 грузится форма2, нужно цикл остановить, пока форма2 загружена, и возобновить цикл после выгрузки формы2. Проще пояснить не могу.

Ответить

Номер ответа: 4
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #4
Добавлено: 18.05.04 20:00

Просто добавь единичку в конец

For a = 1 To 10

If a = 5 Then Form2.Show 1 Else MsgBox a

Next a

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 18.05.04 20:32

1. Можно завести какую-нить глобальную переменную вне формы, например в модуле

2. воспользоваться такой процедуркой:

Public/Private Function IsFormLoaded(ByVal sName as String) as Boolean
Dim i as long
for i=0 to forms.cout - vbnull
If sName = Forms(i).Name Then IsFormLoaded = True: Exit Function
Next
End Function



Ну так вот, и просматривать переменную/значение функции в цикле, если переменная = ложь, то ничего не изменяя вставляем туда DoEvents и call Sleep(1&), причем если цикл со счетчиком (For), то надо не забыть изменить и значение этого счетчика в нужную сторону ;)

Ответить

Номер ответа: 6
Автор ответа:
 __Сергей__



Вопросов: 7
Ответов: 23
 Профиль | | #6 Добавлено: 18.05.04 20:43

По первому и четвертому ответу

run-time error '400':

Form already displayed; can't show modaly

говорит - ни фига я тебе не покажу, хотя форму грузит.

Может как-то

WaitForProcessToEnd (?????????)

Ответить

Номер ответа: 7
Автор ответа:
 __Сергей__



Вопросов: 7
Ответов: 23
 Профиль | | #7 Добавлено: 18.05.04 22:01

run-time error '400':

Form already displayed; can't show modaly

говорит - ни фига я тебе не покажу её как модальную, хотя форму грузит.

Может были у кого такие же грабли.

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 19.05.04 12:05

"Form already displayed"

Ты что же, её второй раз отобразить хочешь? То есть, была немодальная - так стань модальной? Не прокатит.

Ежели выгрузишь перед этим - все должно быть ок.

Ответить

Номер ответа: 9
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #9
Добавлено: 19.05.04 13:07

Скорее всего он её просто грузит неявно.

Например If Form2.Visible=True Then...

Сначала загружает форму, выполняет весь код в событийных процедурах (Load, Activate, Resize, Paint и т.д.), а потом уже проверяет свойство визибле.

Т.е. если ты хотя бы раз к ней явно обращался перед загрузкой, то VB считает что она уже была показана.

Ответить

Номер ответа: 10
Автор ответа:
 __Сергей__



Вопросов: 7
Ответов: 23
 Профиль | | #10 Добавлено: 19.05.04 21:45

- LamerOnLine

да нет не грузил я её, просто прога найдя файлы, а вызывает эту гр,, форму, а модальной, чтоб дос окна сворачивать.

- @CyRax PTR

наверное в самую точку, весь код почти (кроме модуля) в Formload и Resize тоже есть, но я ж форму не вызывал, пока она файлы не найдет.

- А так забил я на вызов модальном режиме, зову обычно, делаю круг на проверку загруженности формы, а в форме Show - modal.

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 20.05.04 09:21

Да быть такого не может!

Неважно, сколько ты к свойствам обращался той формы - ежели она у тебя не показана еще - можешь показать как модальную. Тебе же в ошибке пишут "форма уже отображена".

Проверяй глюки в коде.

P.S. При чем тут ДОС окна?

Ответить

Номер ответа: 12
Автор ответа:
 Владимир



ICQ: 94344607 

Вопросов: 1
Ответов: 2
 Профиль | | #12 Добавлено: 23.05.06 18:11
У меня похожий вопрос по ходу, подскажите заодно.

Execute("c:\proga1.exe";)
Execute("c:\proga2.exe";)

Если так, то сначала запускается proga1 и, не дожидаясь завершения, следом загружается proga2.
А надо, чтобы сначала proga1 завершилась, и уже после загрузилась proga2.

Заранее благодарю. Если можно подробно объясните, я VB почти не знаю. Был похожий вопрос по ссылке:
http://www.vbnet.ru/forum/show.aspx?id=75181
Но WMI я не знаю и не знаю как этим пользоваться.

Спасибо.
С уважением, Владимир

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 23.05.06 18:24
Клево, с момента предыдущего поста (моего) в этой теме прошло ровно два года и три дня :)
По теме - в примерах ищи и по форуму, были такие топы, там через функции синхронизации (WaitForMultipleObjects и т.п.) все довольно просто делается.

Ответить

Номер ответа: 14
Автор ответа:
 LeX



ICQ: 301424893 

Вопросов: 28
Ответов: 277
 Web-сайт: www.vbkoders.info
 Профиль | | #14
Добавлено: 23.05.06 18:30
Вот блин... Морфеусу на пенсию пора:))) А зачем было создавать вопрос и еще сюда постить?

Ответить

Номер ответа: 15
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #15 Добавлено: 23.05.06 18:35
Ладно, набаянил тут кое-че, оптимизацией сам займися

Option Explicit
Private Declare Function WaitForMultipleObjects Lib "Kernel32" (ByVal nCount As Long, ByRef lpHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&


Private Sub Form_Load()
Dim hProcess As Long, pID As Long
pID = Shell("C:\InterfaceLauncher.exe", vbNormalFocus)
hProcess = OpenProcess(SYNCHRONIZE, 0, pID)
If hProcess = 0 Then Exit Sub
WaitForMultipleObjects 1, hProcess, 0, INFINITE
MsgBox "Application closed"
End Sub

ЗЫ Код на VB6.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам