|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
[c#] Problema ritorno variabile da form a form
Avevo postato questa domanda in un topic che però era riferito ad un'altra cosa, per cui credo sia più opportuno postarla in uno nuovo:
Ho un problema sulla dichiarazione di una variabile.. In pratica ho un punto nel programma dove mi viene presa una stringa messa in una textbox dal form1, la passa in un'altra textbox nel form2, la elabora (con una funzione richiamata nel form1 ovviamente) e mette il risultato in una variabile (chiamiamola "val2"). Questa variabile è stata dichiarata come pubblica nel form1: public partial class Form1 : Form { public int val2 = 0; ... Quindi a fine funzione quando il prog torna nel primo form la variabile val2 presumevo contenesse il valore dopo l'elaborazione nel form2.. ma invece quando torna nel form1 val2 è 0.. Pensavo fosse un problema di dichiarazione perchè anche nel form2 avevo messo: int val2 = Convert.blablabla ...allora ho provato a togliere int (nel form2) e mi dice che val2 non esiste nel contesto corrente.. qundi è come se la variabile pubblica dichiarata nel form1 non fosse vista.. Sapete perchè se dichiaro una variabile pubblica in un form questa non mi viene vista anche negli altri form? Sbaglio punto della dichiarazione? Thx... |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Oct 2003
Messaggi: 126
|
La dichiari nel form1 e nel form2 la richiami con form1.val2
Ciao! |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
No, non me lo permette di fare..
Io ho dichiarato nel Form1: public partial class Form1 : Form { public int val2 = 0; ... Ma nel Form2 se scrivo ad esempio: val2 = Convert.ToInt32(valore) Mi dice che la variabile val2 non esiste nel contesto.. mentre io l'ho dichiarata pubblica nel Form1.. Se invece scrivo: int val2 = Convert.ToInt32(valore) allora mi elabora il risultato della variabile, ma solo perchè l'ho dichiarata, tuttavia resta fine a se stessas.. in quanto quando il prog ritorna al Form1 la variabile val2 (dichiarata pubblica) è uguale a 0, ovvero non viene trasferito il suo valore elaborato dal Form2.. Inoltre se scrivo: val2.Form1 mi dà errore.. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Avevo già scritto all'inizio del topic precedente che non me lo permette di fare, mi dà i seguenti errori:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\....\Form2.cs 24 13 fileprova Error 2 An object reference is required for the nonstatic field, method, or property 'fileprova.Form1.val2' C:\...\Form2.cs 24 13 fileprova |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Avevo già scritto all'inizio del topic precedente che non me lo permette di fare, mi dà i seguenti errori:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\....\Form2.cs 24 13 fileprova Error 2 An object reference is required for the nonstatic field, method, or property 'fileprova.Form1.val2' C:\...\Form2.cs 24 13 fileprova |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Avevo già scritto all'inizio del topic precedente che non me lo permette di fare, mi dà i seguenti errori:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\....\Form2.cs 24 13 fileprova Error 2 An object reference is required for the nonstatic field, method, or property 'fileprova.Form1.val2' C:\...\Form2.cs 24 13 fileprova |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Scusate per i 3 topic di fila.. il sito andava a stento e mi dava pagina non trovata dopo l'invio.. addirittura ero tornato per reiserire il topic perchè pensavo non ne avesse messo nemmeno uno, e invece 3 di fila uguali..
![]() Ancora sorry... ![]() Cmq il problema sembra irrisolvibile.. ![]() |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Mar 2006
Città: Molfetta
Messaggi: 239
|
Quote:
Codice:
Form1 frm = new Form1(); // frm.Show(); int valore= frm.val2; Se vuoi accedere ad una variabile come val2 devi prima creare un'instanza della classe Form1 (come nel codice che ho scritto) e poi puoi accederci solo tramite quell'istanza. Se vuoi chiamarla così: Codice:
int valore= Form1.val2; Codice:
public static int val2 = 0;
__________________
Ultima modifica di whiles_ : 25-06-2007 alle 12:05. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Scusa, ti ringrazio della risp ma non ho capito..
Io nel form1 metto: Codice:
public int z = 0; ... Form2 f = new Form2(); f.passaggio = txt1.Text; f.PassMe(); Codice:
public void PassMe() { txt9.Text = passaggio; foreach (char mypass in passaggio) { int passage = Convert.ToInt32(mypass); int z1 = Convert.ToInt32(passage * 3); } ![]() |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2003
Messaggi: 126
|
Form1 con una textbox e un button;
Codice:
public partial class Form1 : Form{ public static string str = ""; private void button1_Click(object sender, EventArgs e){ str = textBox1.text; Form f2 = new Form2(); f2.Show(); } } Codice:
public partial class Form2 : Form{ private void Form2_Load(object sender, EventArgs e){ textBox1.text = Form1.str; } } Lo adatti al tuo caso e sei a posto! Ciao!!! |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Io richiamavo la funzione e non il form perchè volevo che non si aprisse il secondo form, ma che venisse solo eseguito il calcolo sul form2 e ritornato il risultato in una variabile (z nel caso) nel form1..
Ho provato a fare così come mi hai detto, ma a parte che si apre il form2 per via del f.Show() la variabile z perde il suo valore quando esce dal form2 e va a 0.. Form1: public static int z; ... Form2 f = new Form2(); f.passaggio = txt1.Text; f.Show(); <-- si apre e vorrei evitarlo Form2: private void Form2_Load(object sender, EventArgs e) { txt9.Text = passaggio; foreach (char mypass in passaggio) { int passage = Convert.ToInt32(mypass); int z = Convert.ToInt32(passage * 3); } txt9.Text = Convert.ToString(Form1.z); } |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Oct 2003
Messaggi: 126
|
A parte che non ha senso che usi il form 2 solo per fare un calcolo, usa una funzione e se vuoi tenerla separata mettila in un altro file .cs.
Le form servono per visualizzare controlli. Se proprio lo vuoi fare devi assegnare il valore alla z del from1: Form1.z = ... risultato che vuoi passare ... ; |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Grandissimo, ho rimpolpettato sta cosa qua: Form1.z = ... risultato che vuoi passare ... ; all'interno di un foreach e mi ha passato la variabile nel form1.. ti ringrazio davvero..
![]() Ora posso andare avanti con lo studio.. Grazie ancora.. PS: se hai pazienza.. perchè col "return z" non me lo prendeva? (avevo messo "public int PassMe()") |
![]() |
![]() |
![]() |
#15 | |
Member
Iscritto dal: Mar 2006
Città: Molfetta
Messaggi: 239
|
Quote:
Codice:
TextBox1.Text = "bla bla bla"; Codice:
Text = "bla bla bla"; Capito?
__________________
|
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 706
|
Sinceramente sono un po' confuso in quanto nel form2 ho inserito e dichiarato una variabile come pubblica.. e dal form1 l'ho richiamata:
Form2 public string passaggio = string.Empty; Form1 Form2 f = new Form2(); f.passaggio = txt1.Text; f.PassMe(); Mentre quello della variabile z non me lo faceva.. e mi hja confuso un po'.. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:06.