Newsgroup: it.comp.lang.visual-basic
Titolo: Interazioni tra i form

Ciao ciao
Dunque, per favore, 'sta per adesso funziona cosi':
1 - il progetto parte da SubMain
2 - SubMain carica FormSplashScreen
3 - FormSplashScreen dopo due secondi si chiude e carica FormGetUserName
Ho reso il codice piu' ordinato, in questa maniera:
(nel senso che il flusso di esecuzione e' gestito tutto da dentro SubMain)
1 - il progetto parte da SubMain
2 - SubMain carica FormSplashScreen
3 - SubMain va in sleep per due secondi e mezzo
4 - FormSplashScreen dopo due secondi si chiude
5 - SubMain carica FormGetUserName
Ma non sono ancora soddisfatta perche' vorrei che SubMain, in qualche 
modo, intercettasse la chiusura di FormSplashScreen e lanciasse solo 
allora FormGetUserName.
Certo, si potrebbe fare con una variabile mySleep pubblica, definita a 
livello di modulo,
1 - mySleep viene inizializzata a zero
2 - SubMain carica FormSplashScreen
3 - SubMain va in un loop fintanto che mySleep e' uguale a zero
4 - L'evento Unload di FormSplashScreen setta mySleep ad uno
5 - SubMain esce dal loop e prosegue.
Ma non c'e' un modo piu' elegante ? Ovvero, vorrei capire se un form ha 
modo piu' diretto di sapere "cosa stanno facendo" gli altri form.
Grazie per l'attenzione e buon lavoro a tutti !!
Giulia

5 - SubMain carica FormGetUserName
VB6 o .Net?
Se chiami i moduli da Sub_Main e li chiami col metodo Show.VbModal il Sub_Main
apetterą la chiusura del Form prima di proseguire, quindi non ti servono
variabili globali per questo.
http://is.gd/b5lwP
--
ciao
  Stefano

Grazie per la risposta!!
Credo di aver capito; usando questo codice
Load Form1
Form1.Show vbModal
Form2.Show vbModal
Call MsgBox("stop", vbExclamation, App.Title)
si ottiene, appunto, quanto chiedevo.
Solo una cosa: l'istruzione Load Form1 sembra
superflua perche' basta basta
Form1.Show vbModal ad attivare l'evento onLoad di Form1.
Sbaglio?
ciao ciao ciao

Sbaglio?
Non sbagli, Load serve a caricare in memoria senza mostrare il form, Show lo
carica e lo mostra e Hide lo nasconde senza scaricarlo.
--
ciao
  Stefano

 ha scritto nel messaggio
news:4bb0cd80$0$1134$4faf...@reader3.news.tin.it...

VB6, immagino.
In effetti un modo un po' piï¿œ elegante esiste, se l'idea ï¿œ quella che lo 
splash screen si deve chiudere O dopo un timeout O quando l'utente lo 
chiude.
Aggiungi un metodo pubblico chiamato ShowTimed al tuo form splash:
Public Sub ShowTimed(ByVal TimeoutSec As Double, Optional ByVal ParentForm 
As Form)
    Dim StartTime As Double
    StartTime = Timer
    Me.Show vbModeless, ParentForm
    Do While ((Timer - StartTime) < TimeoutSec) And Me.Visible
        DoEvents
    Loop
    Unload Me
End Sub
Quando si invoca questo metodo, viene mostrato il form e tenuto aperto 
finchï¿œ non scade il timeout O l'utente lo chiude.
Inoltre la sub non esce finchï¿œ appunto il form non si chiude, cosicchï¿œ la 
sub chiamante (la Main) si "sospende" e non procede oltre.
E nell'evento Form_QueryUnload nascondi il form invece di scaricarlo, se ï¿œ 
un tentativo di chiusura da parte dell'utente, cosï¿œ esce dal loop.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode <> vbFormCode Then
        Cancel = True
        Hide
    End If
End Sub
A questo punto nella Sub Main:
    FormSplashScreen.ShowTimed 2
    ...
Bye
Raf