Newsgroup: it.comp.lang.visual-basic
Titolo: domanda credo banale

ho una variabile che assume  valore in una procedura del form1. Quando si
apre il form2 e mi serve quella variabile non vi trovo dentro il valore che
aveva assunto! come faccio a far mantenere "tra i form vari"  un valore che
ho assegnato ad una variabile?
ivan



Rendendola pubblica a livello di modulo di form (= implementando una property per il form (passatemi
l'uguaglianza)), oppure rendendola pubblica a livello di modulo standard, quindi estendendo l'area
di validità a tutti i moduli dell'applicazione.
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:qdaekt0p3iskoeofe...@4ax.com...


 ha scritto nel messaggio
news:BYF17.7846$eB4.2...@news.infostrada.it...


spiegarmi come faccio a renderle pubbliche a livello di modulo o cosa?
In una routine (sub, function, evento) una variabile la puoi dichiarare solo con Dim o Static: con
Dim essa ha validità per tutta la routine: al di fuori di questa non ha valore e se esegui la stessa
routine più volte il valore viene riinizializzato (a meno che non la dichiari come Static: in questo
caso mantiene il valore che aveva assunto l'ultima volta che avevi eseguito quella routine).
A livello di modulo di form (sezione dichiarazioni del form): la puoi dichiarare con Private (o Dim,
è la stessa cosa) oppure Public. Con Private (Dim) la validità è estesa (l'area di validità di una
variabile si definisce "scope") a tutte le routine (pocedure, funzioni, metodi) di quel form (a meno
che in una di queste routine non abbia dichiarato una vaiabile di uguale nome, in questo caso questa
seconda variabile vale solo per quella routine, mentre "all'esterno" comanda la "Private a livello
di modulo"; Con Public idem però con la differenza che questa variabile appare nella lista delle
proprietà del form, quindi così facendo implementi una proprietà per la form (come se utilizzassi le
Property Leg/Get: maggiori info sulla guida in linea) e puoi accedere a tale valore anche da un
altra form o comunque da una routine esterna a qulla form..
A livello di modulo standard (.bas), invece, dichiarandola Private limiti lo scope a tutte le
procedure e funzioni di quel modulo, mentre se la dichiari Dim o Public estendi lo scope a tutti i
moduli (di form, sandard o di classe) dell'applicazione.
A livello di modulo di classe, invece, se la dichiari Dim o Private la validità è estesa a tutte le
procedure o funzioni della classe, ma non va mai dichiarate Public: invece vanno usate le routine
Property, per garantire l'incapsulamento (maggiori info sempre nella guida in linea). Per quanto
riguarda le classi c'è da dire che mentre una variabile dichiarata in un modulo standard mantiene il
suo valore per tutto il ciclo di vita dell'applicazione, in un modulo di classe (o di form) mantiene
il suo valore solo per il ciclo di vita dell'istanza del controllo appartenente a tale classe (o del
form in questione): anche qui, maggiori info nella guida in linea.


End Sub
Text1.text=Form1.aaaa



all'interno di un Modulo (ad es. module1.bas) che fa parte del tuo progetto
devi scrivere, proprio all'inizio, prima di ogni altra cosa:
Public MiaVariabile As Integer ' o qualsiasi altro tipo che preferisci.
in questo modo la variabile sarà valida e visibile all'interno di ogno
modulo e form del tuo progetto. e quindi, quando passi da un form a un
altro, la variabile non perde il suo valore.
MarioH

 ha scritto nel messaggio
news:h8dekt0qpdv41266r...@4ax.com...



Metti un bel
Option Explicit
come primissima riga di ogni modulo!
Ciao

 Public MiaVariabile As Integer ' o qualsiasi altro tipo che
preferisci.
sisi, prima di Option Explicit!  :D
Faber


vabbe per chi lo usa... io per es non l'ho mai usato...
MarioH


stomp !
portatemi i sali !
;-) hal

 vabbe per chi lo usa... io per es non l'ho mai usato...
ahiahi...
Faber


aho... mica è indispensabile... ::)))))))
del resto io ho l'occhio di lince... non commetto errori di battitura (gli
errori che faccio sono ben piu gravi... eheh), e dopo aver scritto 5 righe
di codice faccio le prove generali... quindi se sgarro me ne accorgo subito
(tranne se si tratta di errori di altro genere - algoritmi che non
funzionano, funzioni ricorsive che si incartano su se stesse... ma non è un
probl di nomi di variabili).
MarioH

 non avendo niente di meglio da fare,
pigiando a caso sulla tastiera, scrisse:


 ha scritto nel messaggio
news:9ibnhd$hp4np$1...@ID-70152.news.dfncis.de...

non ti auguro di utilizzare un altro linguaggio di programmazione
(magari sintatticamente più rigoroso).
non si tratta solo di errori di battitura, quanto di errori di scope (e
di tipi...)
Ciao
Faber

end if
Non e' certamente il tuo caso, pero' ti posso assicurare che i programmi piu' contorti
e bacati, in cui ho dovuto mettere mano, non usavano Option Explicit.
Anzi, diverse volte ho risolto dei bug strani ed apparentemente casuali proprio
aggiungendo l' option explicit.
Il mancato ricorso alla dichiarazione delle variabili e' la prima causa di errori, anche
grossolani, nel codice e, quel che e' peggio, spesso difficili da scovare.
Come ha gia' detto Faber, gli errori di scope e di tipo sono la conseguenza principale
del suo non uso.
Ad esempio, riporto dalla Microsoft Office 2000/Visual Basic Programmer's Guide:
"
Caution   
A procedure can use a variable that is not explicitly declared in the procedure, 
but a naming conflict can occur if anything you have defined at the script level 
has the same name. 
If your procedure refers to an undeclared variable that has the same name as 
another procedure, constant, or variable, it is assumed that your procedure is referring 
to that script-level name. 
To avoid this kind of conflict, use an Option Explicit statement to force explicit 
declaration of variables.
"
ciao, hal