Newsgroup: it.comp.lang.visual-basic
Titolo: L'evento load

Sul mio manuale di vb6 (F. Balena - Programmare VB6) c'è una spiegazione,
per quanto riguarda l'evento load del form che non mi è affatto chiara (sono
mooolto alle prime armi :-) )...
Eccola:
----------------------------------------------------------------
Ciò che accade dopo l'evento Initialize dipende da come avete fatto
riferimento al form nel vostro codice. Se avete usato soltanto una variabile
pubblica (o più correttamente una sua proprietà Public), come nella seguente
riga di codice
frmCustomer.CustomerName = "John Smith"
non accade nient'altro e il flusso di esecuzione torna al chiamante; il
vostro codice è ora in grado di impostare la variabile/proprietà
CustomerName al nuovo valore poiché nel frattempo è stata creata una nuova
istanza dell'oggetto frmCustomer. Se invece il vostro codice fa riferimento
alla proprietà di un form o a un controllo sul form stesso, l'operazione non
può essere completata fino a quando non vengono creati la finestra e i suoi
controlli; al termine di questo passaggio viene quindi provocato un evento
Load.
----------------------------------------------------------------
Chi mi spiega cosa vuol dire tutto ciò?
In particolare non mi è chiaro:
1) fatto riferimento al form, dove? Nella parte in cui lo si invoca? E se è
il form di partenza dell'applicazione?
2) Significa che in alcuni casi l'evento load potrebbe non verificarsi? E se
sì, in quali casi?
3) Che significa "una sua proprietà Public"?
4) Nella riga di codice di esempio "frmCustomer" è il nome del form? E
CustomerName, che cos'è? Da come è scritta (secondo la mia pochissima
esperienza) mi sembrerebbe una proprietà dell'oggetto "frmCustumer", ma che
proprietà è mai "CustomerName"?
5) Che significa "il flusso di esecuzione torna al chiamante"?
6) Che cosa si intende per "variabile/proprietà"?
7) In sostanza, cosa significa tutto il testo che ho riportato? :-)
Grazie.

 7) In sostanza, cosa significa tutto il testo che ho riportato? :-)
che dovresti iniziare a leggere il libro dal primo capitolo, con molta 
pazienza.
Tutte le domande che hai fatto trovano probabilmente risposta nei 
capitoli precedenti, mentre il testo da te quotato significa 
semplicemente che l'evento load di un form viene generato solo quando 
viene invocato il metodo show o quando viene fatto riferimento ad un 
controllo presente sul form o ad una proprietà del form stesso (dove per 
proprietà del form si intende proprietà della classe form, ma per non 
incasinarti le idee pensa alle proprietà che ti appaiono con 
l'intellisense...). Questo perché il form e tutti i suoi controlli devono 
essere creati per metterti a disposizione la proprietà a cui hai fatto 
riferimento.
Ciao,
Moreno
Inviato da 
www.mynewsgate.net

 mooolto alle prime armi :-) )...
Ti faccio un esempio per chiarirti il concetto, fermo restando che devi
rileggerti il libro di Balena più  e più volte ;)
Supponiamo che il form in questione sia un impiegato. L'evento Initialize è
equiparato alla sua assunzione, l'evento Load è equiparato al suo arrivo
fisico nell'ufficio del capo. Se il capo chiede il nome di un impiegato,
questo non deve per forza essere presente in ufficio (pPersona.Nome NON
scatena l'evento Load). Se invece vuole sapere la sua pressione sanguigna
ATTUALE, deve convocarlo. Se vuole che lui gli stringa la mano, deve venire.
Bada bene che può anche eseguire metodi (abbassargli lo stipendio) e
funzioni (chiedergli qualcosa per telefono) senza scatenare il Load. Basta
che non vengano invocati oggetti che richiedano il Load. Per esempio, se nel
metodo Promozione è richiamato il  metodo interno StrettaDiMano, il Load
verrà scatenato.
Se però la persona di cui si invocano i metodi è il capo stesso, allora è
ovvio che deve essere presente nella stanza per qualsiasi cosa, non perché
le sue proprietà siano accessibili, ma perché è lui che le invoca.
Spero di essere stato chiaro
-- 
Ciao, Silv:o)

 riferimento.
Si questo mi è, ora, abbastanza chiaro. Ma continuo proprio a non capire
quel "frmCustomer.CustomerName = "bla bla bla"
Grazie per le risposte!

 Spero di essere stato chiaro
L'esempio è davvero chiarissimo ed illuminante quanto al quando viene
provocato l'evento load e quando no!!!
I dubbi continuano a riguardare, in particolare, quel
frmCustomer.CustomerName = "bla bla" e  il concetto di variabile/proprietà.

 variabile/proprietà.
frmCustomer.CustomerName = "bla bla" era solo un esempio ipotetico per
spiegarti questo:
Una form e' anche una classe, quindi hai facolta' di aggiungere proprieta' e
metodi pubblici e privati a tuo piacimento definendo le routine oppurtune.
Supponi quindi di aggiungere, per qualche motivo, una property
'CustomerName' alla finestra 'frmCustomer', in uno dei seguenti modi:
'1 - Variabile pubblica
Public CustomerName As String
oppure
'2 - Proprieta' pubblica con variabile privata di appoggio
Private mCustomerName As String
Public Property Get CustomerName() As String
    CustomerName = mCustomerName
End Property
Public Property Let CustomerName(ByVal sCustomerName As String)
    mCustomerName = sCustomerName
End Property
se, come nell'esempio, da codice esterno alla form fai riferimento a questo
membro (definito in uno o nell'altro modo), dato che internamente questo
lavora solo su variabili "normali" e non su proprieta' intrinseche della
form e/o sui suoi controlli, il runtime ha bisogno di caricare in memoria
solo l'istanza di classe, se ancora non c'e' (quindi scatta solo l'evento
Initialize) ma non la parte "pesante" della finestra (quindi niente Load)
Viceversa ogni accesso a proprieta' native della form o a proprieta' esposte
da uno dei controlli scatenera' anche l'evento Load, sempre se questo non e'
gia' stato fatto in un momento precedente.
quindi il codice
'txtCustomerName e' un controllo TextBox
frmCustomer.txtCustomerName.Text = "John Smith"
scatena l'evento Load
Nota anche che se invece ridefinisci in maniera diversa la property
CustomerName con:
Public Property Get CustomerName() As String
    CustomerName = txtCustomerName.Text
End Property
Public Property Let CustomerName(ByVal sCustomerName As String)
    txtCustomerName.Text = sCustomerName
End Property
poiche' indirettamente fai riferimento ad un controllo, anche il codice
originale
frmCustomer.CustomerName = "John Smith"
causa un caricamento completo.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 causa un caricamento completo.
Ok, anche questo è chiaro!
Grazie!