Newsgroup: it.comp.lang.visual-basic
Titolo: Bloccare esecuzione programma

Ho creato un form che viene visualizzato in modalità vbModal.
Questo form funge da MessageBox (un esempio lo si può trovare nel mio Winpak
sul SC o all'indirizzo: 
http://www.nicolaottomano.it/filesuite.zip
 ).
Il problema è che se visualizzo un messaggio all'utente, e nello stesso
momento si scatena un evento che vuole visualizzare un altro messaggio,
allora mi arriva errore "400: Form già visualizzato. Impossibile
visualizzarlo a scelta obbligatoria".
Questo perchè il secondo evento cerca di aprire un form modale già
visualizzato.
E' possibile in qualche maniera bloccare l'esecuzione del programma finchè
il form modale non viene chiuso?
Ho provato a fare
do while messAperto=true
        doevents
loop
ma mi blocca completamente tutto il programma.
Confido in voi (san Google non ha fatto il miracolo)
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it

 loop
Preciso che messAperto è una variabile booleana che diventa true quando
viene aperto il frmMessageBox e false quando è chiuso.
In sostanza la uso come flag.


 programma finchè il form modale non viene chiuso?
Ora non mi sovviene nulla per fare questo, ma se vuoi evitare l'errore e
permettere che vengano visualizzati anche altri form modali ti basta
istanziarli con New.
Butta un timer (interval almeno 5000 se non vuoi impazzire =))
in un form e copia-incolla il codice:
Private Sub Timer1_Timer()
    Dim f As Form1
    Set f = New Form1
    f.Caption = Time
    f.Show vbModal
End Sub
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 [SNIP]
Qualcosa mi e' sovvenuto. Se nello Show del form Modale, passi anche
l'OwnerForm, quest'ultimo non scatenera' piu' eventi finche' non verra'
chiuso il modale.
Solito progetto nuovo, inserisci un secondo form, butta un timer sul primo
(interval 5000), copia-incolla:
Private Sub Timer1_Timer()
    Form2.Caption = Time
    Call Form2.Show(vbModal, Me)
End Sub
Naturalmente se il progetto e' composto da piu' form, gli "altri" (rispetto
all'OwnerForm) continueranno a generare eventi. A mio avviso la soluzione
migliore e' una combinazione dei due metodi che ti ho illustrato (ovvero
passare _sempre_ l'OwnerForm come parametro e _sempre_ istanziare il
MessageBox con New).
Se hai bisogno di ulteriori spunti o aiuto per sviluppare il sistema non
esitare a chiedere =)


Innanzitutto grazie per l'idea.
Il mio problema è che richiamo il form tramite un modulo, quindi per
passargli l'ownerform devo dichiarare:
Public Function MessageBox(Mensagem As String, Buttons As Buttons, Icon As
Icons, Optional FormChiamante As Form)
poi, dopo aver inizializzato alcune variabili, eseguo il form in questione
con
frmMessageBox.Show vbModal, FormChiamante
solo che mi arriva l'errore:
371 "Impossibile utilizzare l'oggetto specificato come form proprietario per
Show()"
come risolvere questa cosa? E' da un'ora che ci sbatto la testa ma non mi
viene niente in mente (forse devo passare l'hWnd?


 ma mi blocca completamente tutto il programma.
in che senso ti blocca completamente il programma? Se intendi che non 
vengono eseguite altre istruzioni, ok, concordo poiche' e' in attesa 
della chiusura della form, ma altrimenti non dovrebbe proprio (ho appena 
provato per sicurezza, a meno che non sia qualcos'altro (un timer?) che 
occupa la cpu.
Un'altra alternativa, invece, potrebbe essere quella di creare n istanze 
della form, ma questo ti porterebbe a visualizzarle tutte 
contemporaneamente: non so se ti va bene.
Prova comunque a verificare il reale motivo del blocco, magari postando 
un po' di codice o descrivendo meglio l'operatività delle procedure in 
questione.
Ciao,
Moreno
Inviato da 
www.mynewsgate.net

 vengono eseguite altre istruzioni, ok,
nel senso che non accetta piů i comandi del mouse (o meglio li accetta ma ci
vogliono circa 4-5 sec. prima che abbiano effetto)
