Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] Variabile globale

Ciao,
in un mio progetto ho dichiarato una variabile in questo modo:
Public Class frmStart
     Public db As New db_uty_odbc("TEST")
     ....
End Class
Dove db_uty_odbc ï¿œ una classe che mi sono fatto io che mi serve per la 
connessione al db.
Ovviamente la db la uso in tantissime funzioni dentro la form1.
Adesso ho un grosso problema. La stringa "TEST" la vorrei leggere da un 
file di configurazione, che ovviamente verrï¿œ letto onLoad della form.
Come posso definire la variabile db dopo aver letto il mio file di 
configurazione (quindi nell'evento onLoad della form) lasciandola 
"pubblica" ?
ciao, grazie
Mauro

Come posso definire la variabile db dopo aver letto il mio file di
configurazione (quindi nell'evento onLoad della form) lasciandola
"pubblica" ?
...
Una risposta "secca" al tuo quesito, ed una piu' articolata..
La risposta secca, che comunque ti consiglio vivamente di NON usare, prevede 
la dichiarazione della variabile cosi' come hai fatto tu, ma senza il New,
in pratica dichiari la variabile ma non la istanzi
Public Class frmStart
    Public db As db_uty_odbc
    ....
End Class
Nella routine che utilizzi per leggere il file di configurazione, dopo aver 
letto la stringa che ti interessa, crei realmente il tuo oggettodb
StringaLetta = (vedi tu come leggere la tua stringa)
db = New db_uty_odbc(StringaLetta)
e questa e' la prima risposta.....
La seconda, ad integrare la prima, ti vuol suggerire di evitare di 
dichiarare variabili pubbliche e fare riferimento a queste da classi 
esterne, questo perche' obblighi tutte le altre classi a lavorare in 
simbiosi con la classe che contiene la variabile pubblica.
Cioe', ammettiamo che tu abbia una classe Cliente, che ha bisogno di questo 
oggetto di tipo  db_uty_odbc per funzionare.
Se tu, all'interno della classe Cliente, fai riferimento alla variabile db 
definita in frmStart, non potrai mai piu' utilizzare il codice (o meglio 
tutta la classe) Cliente in un progetto che non abbia un frmStart al cui 
interno non venga esposta una variabile di nome db del tipo  db_uty_odbc.
Chissa' se sono stato abbastanza chiaro.
Ciao 

 Chissa' se sono stato abbastanza chiaro.
Si, sei abbastanza chiaro. Se ho capito bene quello che mi dici non è un 
problema in quanto io la variabile db la uso solo all'interno delle form 
del mio progetto, quindi l'uso è corretto .... spero.
L'unico dubbio è se il tuo discorso vale anche per le classi che 
definiscono le form della mia applicazione?
Io ho una form principale dove visualizzo diverse datagrid lette da db, 
in questa form ho N funzioni che per popolare le varie datagrid si 
appoggiano alla db.
Poi ho alcune form secondarie che agiscono su singole tabelle del db, in 
ognuna di queste form all'inizio ho definito una nuova variabile db che 
uso sempre e solo dentro quella form.
In questo caso l'uso che io faccio delle variabili pubbliche è corretto?
ciao
Mauro

 In questo caso l'uso che io faccio delle variabili pubbliche corretto?
Beh, se le usi così, non ha senso che siano dichiarate pubbliche... o
ne dichiari una pubblica "tout court" in un modulo/classe shared (con
le accortezze del caso), oppure tanto vale che siano Private; ottieni
lo stesso identico effetto senza rischiare di referenziarle da oggetti
esterni.

 Ciao,
zac
Se devi leggere una impostazione che raramente cambia...ci sono le 
risorse li per quello!
E' equivalente a scriverle in un file(xml per l'esattezza) ma tutto il 
lavoro sporco di gestione lo fï¿œ il dotNet.
Io lo uso (ad esempio)per la stringa di connessione: ho lasciato una 
minima libertï¿œ di scelta nel piazzare il database. Alla prima 
installazione o quando spippolano il path va a aggiornare la risorsa 
della stringa di connessione.
Ma va bene anche per altro: gli do da mangiare un file particolare(nulla 
di che gli ho cambiato l'estensione) via internet e si cambia alcune 
icone nel programma!
E' l'evoluzione oop dei file ini!
-- 
------------------------------
Wodka40 Thunderbirizzato
Wodka si ï¿œ pure facebookkizzato
http://www.facebook.com/Wodka40
In omaggio ai primi 10 amici un pullover di
lana ombellicale di "Giggi er sozzo"

 lavoro sporco di gestione lo fà il dotNet.
Mi puoi dare qualche info in più ?
Cercando 
vb.net
 risorse non trovo niente di utile :-(
ciao
Mauro

 esterni.
Grazie !
ciao
Mauro

 Grazie !
Aggiungo che puoi fare una form Base che istanzia quella variabile, e tutte
le tue "vere" form le derivi da quella base. Cosě non se in futuro cambi
qualcosa lo fai solo sulla form base.

 qualcosa lo fai solo sulla form base.
Ottima idea, grazie mille !!!
ciao
Mauro


RESOURCES
cmq
Parti da qui
http://totemslair.org/guide/viewchapter.php?guida=vb&id=106
Nella guida (F1)se cerchi resources trovi moltissimo
cmq:
http://msdn.microsoft.com/it-it/library/f45fce5x(VS.80).aspx
http://msdn.microsoft.com/it-it/library/system.resources.resourcemanager(VS.80).aspx
...ci sarebbe anche SETTINGS
se devi discriminare in base all'utente che lancia l'applicazione
Questi namespace sono wrapper a file xml estremamente versatili e 
servono proprio a fare quello che vuoi tu.
In vb6 avresti fatto un rozzo file ini....qui è tutto molto più 
sofisticato e robusto(benchè i file risorse ci fossero anche in vb6)
Il bello è che questi dati vengono inglobati nell'assembly!
Saluti!
-- 
------------------------------
Wodka40 Thunderbirizzato
Wodka si è pure facebookkizzato
