|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
|
[C#] Passaggio dati tra form
Ave truppa!
Ho iniziato da poco a fare c#, ed ho un piccolo problema: come passo dati tra due form (ad esempio form1 e form2)? Ho trovato un paio di soluzioni su internet ma non vanno... Chi mi fa vedere del codice funzionante? Grazie in anticipo, ciao! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
|
semplicemente modifichi il costruttore del form "chiamato" affinchè accetti un certo numero di parametri e glieli passi al momento della chiamata
dal form chiamante Codice:
TipoForm formChiamato = new TipoForm(tipo param1, tipo param2, tipo param3); Codice:
public TipoForm (tipo p1,tipo p2,tipo p3){
.....
}
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
|
Ok grazie della risposta. Ciò che dici vale nel caso io voglia passare dati dal form principale a quello che apro.
Se invece io volessi fare l'inverso? Ad esempio, da form1 apro form2, in quest'ultimo prendo (tramite textbox ad esempio) due stringhe e voglio riportarle nel form1. Come potrei fare? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
potresti fare uso di una classe statica ed utilizzarla come "contenitore"
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
|
semplicemente ... al posto di passargli dei tipi semplici (int, long) gli passi un tipo complesso. I tipi complessi non vengono "passati" via "value", ma via "reference", per cui le modifiche e le valorizzazioni che tu farai nell form chiamato verranno perpetrati anche nel form chiamante.
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
|
non è molto "pulita" come soluzione, ma può sempre andare bene.
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933 |
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Quote:
|
||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
|
assolutamente ... ma lasciami dire una cosa ... quando hai anche fare con programmini semplici e sei solo tu a metterci le mani è una libidine utilizzare queste soluzzioni ... ma quando sei in un team di 15 persone che fanno cose diverse, con stili diveri ... o rispetti gli standard o nel sotto terra (come me in questo momento ... e per la pazzia cazzeggio qui)
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933 |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Cmq idem per team, pazzia e cazzeggio (ti capisco :-P) Kintaro10 facci sapere cosa decidi! |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
|
Innanzitutto vi ringrazio per le risposte.
Ho usato il metodo ref, per l'esattezza ho passato in riferimento il form uno al form due, facendo in quest'ultimo un overloading del costruttore. In questa maniera dal secondo form ho accesso alle variabili ed ai metodi pubblici del primo form. Dite che va bene passare in riferimento tutto il form, oppure può creare problemi? Comunque grazie ancora, a presto! |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Codice:
Form2 f2=new Form2(); f2.ShowDialog(this); Magari è ancora meglio |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
|
Ho usato una cosa simile, cioè all'interno di un evento di form1, ho messo:
Quote:
|
|
|
|
|
|
|
#13 |
|
Registered User
Iscritto dal: Feb 2008
Messaggi: 77
|
Siccome Form è una classe e non una struttura il "ref" non serve... le classi vengono sempre passate byref.
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
non vorrei dire una cavolata ma credo che ci sia una differenza, senza il ref non è un vero passaggio per riferimento ma un passaggio "per valore del riferimento", cioè puoi aggiornare tutti i campi della classe ma non il suo riferimento. Qualcuno conferma?
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
|
Se fosse vero, che problemi si potrebbero creare?
|
|
|
|
|
|
#16 | |
|
Registered User
Iscritto dal: Feb 2008
Messaggi: 77
|
Quote:
Per quanto riguarda le classi, l'uso del ref serve solo se nella funzione si vuole modificare il valore del puntatore alla classe (con una new o attribuendo il puntatore ad un'altra classe). Ad esempio: Codice:
class A
{
public int I = 0;
}
static void ConRef(ref A a)
{
a.I = 1;
a = new A();
}
static void SenzaRef(A a)
{
a.I = 1;
a = new A();
}
static void Main()
{
A a = new A();
Console.WriteLine("Caso 1: " + a.I); // I vale 0
ConRef(ref a);
Console.WriteLine("Caso 2: " + a.I); // I vale 0 -> la classe è stata reinizializzata
SenzaRef(a);
Console.WriteLine("Caso 3: " + a.I); // I vale 1 -> la classe è stata modificata
Console.ReadKey();
}
Ultima modifica di kernel::panic : 13-03-2008 alle 15:00. |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Ok era quello che intendevo, grazie! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:39.




















