PDA

View Full Version : [C#]Variabili globali


Mattyfog
05-10-2009, 11:44
Sempre che il titolo sia giusto ho bisogno di sapere una cosa.
Devo richiamare una funzione e passargli molte variabili. Solo che diventa un po un casino.
Non c'è un modo per dichiarare le variabili in modo che siano accessibili a tutto il programma?

ndakota
05-10-2009, 13:02
Dichiarala static, dovrebbe bastare.

tomminno
05-10-2009, 13:10
Sempre che il titolo sia giusto ho bisogno di sapere una cosa.
Devo richiamare una funzione e passargli molte variabili. Solo che diventa un po un casino.
Non c'è un modo per dichiarare le variabili in modo che siano accessibili a tutto il programma?

Le parole "funzione" e "C#" non vanno molto d'accordo.
Dovresti creare classi e metodi, ma funzioni credo proprio che siano estranee al C#.
Stai per caso scrivendo tutti metodi statici richiamati dal Main?

Eventualemente se queste variabili sono organizzabili (es nome, cognome, indirizzo, età, ecc) potresti racchiuderle in una classe (es Persona) e passare quella al tuo metodo.

MarcoGG
05-10-2009, 13:20
Non c'è un modo per dichiarare le variabili in modo che siano accessibili a tutto il programma?

Metti le variabili e i metodi "globali" come "Public static" in una "Public static class <NomeClasse>".

Mattyfog
05-10-2009, 19:41
grazie a tutti proverò ;)

Mattyfog
06-10-2009, 22:04
mi potete fare un esempio? re io volessi rendere disponibili in tutti i metodi una listbox?

ndakota
06-10-2009, 22:24
mi potete fare un esempio? re io volessi rendere disponibili in tutti i metodi una listbox?

Ma non vuoi proprio imparare la oop?

MarcoGG
07-10-2009, 08:40
mi potete fare un esempio? re io volessi rendere disponibili in tutti i metodi una listbox?

Puoi crearti una classe statica che contiene la dichiarazione della Form che ospita la ListBox :
public static class MieForms
{
public static Form2 Frm2;
}

Su Form2 c'è "ListBox1".
In Form2.Designer.cs basta che cambi :
private System.Windows.Forms.ListBox listBox1;
in
public System.Windows.Forms.ListBox listBox1;

Crei l'istanza di Form2 e ne usi la ListBox da ogni punto del codice :
MieForms.Frm2 = new Form2();
MieForms.Frm2.Show();
MieForms.Frm2.listBox1.Items.Add("prova");

tomminno
07-10-2009, 09:02
Puoi crearti una classe statica che contiene la dichiarazione della Form che ospita la ListBox :


Perchè continuare a incoraggiare pratiche di programmazione sbagliate?

MarcoGG
07-10-2009, 09:21
Perchè continuare a incoraggiare pratiche di programmazione sbagliate?

Non è un incoraggiamento, è solo una risposta concreta e funzionante alla domanda di Mattyfog, che come sempre deciderà di usarla o meno a suo piacimento.

Potrà non essere il massimo della purezza e dell'eleganza, ma non ci vedo nessuna bestemmia dentro.
Perchè continuare a criticare le soluzioni altrui quando non si ha niente di meglio e soprattutto di concreto da consigliare ?

tomminno
07-10-2009, 09:30
Non è un incoraggiamento, è solo una risposta concreta e funzionante alla domanda di Mattyfog, che come sempre deciderà di usarla o meno a suo piacimento.

Potrà non essere il massimo della purezza e dell'eleganza, ma non ci vedo nessuna bestemmia dentro.
Perchè continuare a criticare le soluzioni altrui quando non si ha niente di meglio e soprattutto di concreto da consigliare ?

Scusa ma consigliare di rendere statico un oggetto dell'interfaccia grafica non mi sembra proprio adatto.
Un'altra soluzione concreta è "eventualmente" di rendere statica una lista di oggetti (stringhe o quant'altro) e di far fare il bind della listbox con questo oggetto statico.

MarcoGG
07-10-2009, 10:27
Scusa ma consigliare di rendere statico un oggetto dell'interfaccia grafica non mi sembra proprio adatto.
Un'altra soluzione concreta è "eventualmente" di rendere statica una lista di oggetti (stringhe o quant'altro) e di far fare il bind della listbox con questo oggetto statico.

Bisogna avere chiaro il significato compiuto della richiesta di Mattyfog :
Se io volessi rendere disponibili in tutti i metodi una listbox ?

Io l'ho letta così : rendere visibile e utilizzabile una listbox ( su una Form ) da ogni punto del codice. Una listbox, intesa come l'intero oggetto, non solo relativamente alla sua collection .Items, ma alla totalità dei suoi metodi/proprietà.
Perciò ho suggerito quella soluzione, che non pretendo sia la migliore, ma funzionante e adatta allo scopo.

La tua soluzione del bind con una List di stringhe/oggetti non l'ho presa in considerazione, in quanto risolverebbe solo il problema di avere la proprietà .Items, visibile da ogni punto del codice. Inutile discutere oltre, finchè non è chiaro a cosa si riferisse Mattyfog...

Mattyfog
07-10-2009, 13:48
si mi sono espresso male a me batsa la proprietà items