Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Dim in modulo

Dichiaro una var integer nel modulo di un form, poi gli dò un valore tipo
100.
Chiudo il form, ma quando lo riapro la variabile ha ancora il valore 100.
Questo non succede se azzero la variabile nell' unload o con valore =0
oppure con set form1=nothing.
Ho letto in un post del NG, che il secondo metodo non è consigliabile
perchè?
Ciao Carmelo

 perchč?
Questo lo ignoro, ma sicuramente qualcuno chiarirŕ anche questo ultimo
dubbio
(of course, se ho detto cazzate (altrimenti dette con termine piů gentile
"lievi imprecisioni") non abbiate timore a segnalarlo....)
Salutoni
Sergio

 perchč?
No, e' corretto .... se alludi al post di Gigio2K, si parlava di un contesto
particolare relativo ad un ciclo For Each...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ho letto in un post del NG, che il secondo metodo non è consigliabile
Qualcuno ha detto questo?
Non mi pare :)
Odio quando qualcuno "mette in bocca" parole mai usate a qualcun altro :)
Come dice Luca si parlava di un utilizzo particolare e non scorretto, ma
piuttosto inutile.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 viene scaricato il codice relativo.
permettimi di precisare : se per "chiudere" intende la  ".hide" oppure la x
in alto senza specificare l'unload e' normale che non si scarichi ( sti gg
so diventato esperto in materia con msdn ) perche' la form viene caricata e
inizializzata fino a quando NON LA SCARICHI ESPLICITAMENTE , se clicchi la X
senza specificare nulla in form_unload o fai "Form.hide" la form e' solo
NASCOSTA , se richiami la funzione .show non si riazzera perche' la form e'
ancora in memoria !!!
in pratica la form "vive" cosi :
- load carica la form in memoria e la inizializza e rimane nascosta
- .show visualizza la form e se non e' stata caricata con load la carica e
la visualizza
- .hide o form_unload() NASCONDONO la form ma non la scaricano !
- per scaricare la form fai cosi :
sostituisci il
form.hide (se lo usi)
con call form_unload()
in form_unload() inserisci :
Private Sub Form_Unload(Cancel As Integer)
  Unload me 'scarichi parzialmente la form
 set me = nothing  'FORSE scarica anche tutte le variabili "appese" (e si ,
ancora non l'ho capita bene sta storia de set nothing )
End Sub
cosi sia da codice o da X tu esegui sempre l'unload del form e quindi il suo
"azzeramento"

 End Sub
Un Unload nell'evento Unload?

 ancora in memoria !!!
Permettimi di precisare la precisazione ;-)
Form.Hide e "cliccare la X" (nelle varie accezioni) sono due cose ben
diverse; nel primo caso la form viene effettivamente solo nascosta, ma nel
secondo viene fatto l'unload vero e proprio, ne' piu' ne' meno
dell'istruzione Unload Form
La cosa e' facilmente verificabile; basta creare un form con un pulsante e
incollare questo codice:
Private Sub Form_Load()
Debug.Print "Sto caricando"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Debug.Print "Sto scaricando"
End Sub
Private Sub Command1_Click()
Me.Hide
End Sub
ora provando ad aprire e chiudere alternativamente con la X e con il
pulsante si nota il comportamento differente.
Fare "Unload Me" nell'evento Unload e' inutile, perche' queste evento viene
scatenato solo quando la form si sta per l'appunto scaricando, cioe' in
risposta ad un'istruzione Unload messa da qualche altra parte oppure alla
famosa X


 Un Unload nell'evento Unload?
bha , hai ragione , ok adesso ne ho la certezza :
MI SONO FUSO a cercare di capire sti scaricamenti delle form , da adesso in
poi ci schiaffo gli END e lancio i CD di VS6 dal balcone !!!!

 poi ci schiaffo gli END e lancio i CD di VS6 dal balcone !!!!
No, sei troppo in gamba (e sei anche testardo quanto basta per pretendere di
capire le cose che fai) per farlo:
Cancella per un attimo tutto. No, non voglio fare una guida, nè il
"sotuttomì", ma solo consigliarti di "ripartire" da questi semplici
concetti:
Nome_Form.Hide nasconde solo la parte grafica del form, il codice resta e
continua a girare (prova con un timer che fa Beep ogni secondo)
Unload Nome_Form forza l'evento Unload, del tutto identicamente a quanto
avviene cliccando la X sulla form Nome_Form. Occhio: Mai mettere istruzioni
dopo Unload Nome_Form!
L'evento Form_Unload è quello che si verifica poco prima (e poco prima di
questo si verifica l'evento QueryUnload) che la form venga scaricata e
(stando alla guida) distrutta.
Attenzione, da questo momento in poi ogni riferimento al Nome_Form
provocherà un Load (evento Form_Load) della stessa che verrà ricaricata in
memoria, pur senza essere esposta.
Il pasticcio può nascere dal fatto che, per alcuni, VB non fa sempre quel
che dice: Non scarica subito e sempre le form che hanno "subito" l'evento
Unload. Ecco perchè si consiglia di mettere, nell'evento Unload del form
principale/master/menù, insomma il primo ad aprirsi e l'ultimo a morire:
    On Error Resume Next
    For Each f In Forms
        If f.Visible Then
            Unload f
        End If
        Set f = Nothing
    Next f
Io, qui sotto, un End glielo sbatto lo stesso!

 Io, qui sotto, un End glielo sbatto lo stesso!
GHGHHGH Esatto ecco cosa mancava , menomale !
Tutti i casini sono nati da sto maledetto set XXX = nothing ! quindi
continuo come ho sempre fatto col solo unload e metto un apice qui :
sub form_unload...
 ' unload me
end sub
non chiedetemi di togliere il commento perche' la mia mente ancora si abitua
a farne ammeno !!!
Finalmente la vita delle form mi e' chiara come anche quella dei moduli di
classe "normali" : si caricano nel momento della chiamata e si scaricano nel
momento in cui la variabile di riferimento viene distrutta ( se da codice
non si distrugge la variabile, la form_unload dovrebbe distruggerla e
comunque se passa quel punto va a sbattere contro un bel comando di 3 cifre
^_- )
GRAZIE INFINITAMENTE A TUTTI !
--
[Gigio2K]

 famosa X
Perfetto ! Grazie mille !

 a farne ammeno !!!
Lascia pure il commento, ma non sperare (per quanto detto prima) che,
cliccando un bottone (per esempio Esci) che esegue l'istruzione Call
Form_Unload() la forma si chiuda...
Diverso, invece, se quel bottone esegue l'istruzione Unload Me. E' chiara la
differenza sostanziale?

 differenza sostanziale?
si infatti prima facendo :
call form_unload()
  e avendo
sub form_unload
 unload me
end sub
funzionava , adesso vario in
unload me
e
sub form_unload()
 'grazie a lupo non serve piuě unload me
end sub
dubbio : di solito uso del codice in "queryunload" ( salva impostazioni
ecc.. ),
da buttun eseguendo "unload me" vengono comunque chiamate le funzioni
nell'ordine :
terminate
queryunload
unload ?
( credo di si perche' solo l'end, a quanto ne so, salta la "terminate" e
"queryunload" )

 unload ?
Scusate se mi intrometto: l'ordine di questi eventi non dovrebbe essere
QueryUnload
Unload
Terminate
Tant'è che durante l'evento terminate non è più possibile fare riferimenti
ai controlli della maschera perchè già scaricati?
Salutoni
Sergio

 unload ?
per QueryUnload e Unload sì, in quella sequenza. Terminate credo che sia ...
il canto del cigno.

 ai controlli della maschera perchè già scaricati?
Credo proprio di sì (come dicevo nell'altro post, dovrebbe essere il canto
del cigno della form)