Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Con un semplice dialogo in linguaggio naturale e la potenza di una scheda video di fascia alta è possibile costruire software funzionante da zero, senza scrivere una riga di codice e senza inviare un solo byte dei propri dati a server esterni
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-06-2007, 18:36   #1
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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...
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2007, 18:42   #2
Strat
Member
 
L'Avatar di Strat
 
Iscritto dal: Oct 2003
Messaggi: 126
La dichiari nel form1 e nel form2 la richiami con form1.val2

Ciao!
Strat è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2007, 20:36   #3
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 07:04   #4
Energy++
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1060
Quote:
Originariamente inviato da Dr Nick Riviera Guarda i messaggi
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..
infatti devi scrivere Form1.val2, non il contrario
Energy++ è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 03:12   #5
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Quote:
Originariamente inviato da Energy++ Guarda i messaggi
infatti devi scrivere Form1.val2, non il contrario
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
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 03:13   #6
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Quote:
Originariamente inviato da Energy++ Guarda i messaggi
infatti devi scrivere Form1.val2, non il contrario
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
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 03:14   #7
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Quote:
Originariamente inviato da Energy++ Guarda i messaggi
infatti devi scrivere Form1.val2, non il contrario
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
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 00:32   #8
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 11:59   #9
whiles_
Member
 
L'Avatar di whiles_
 
Iscritto dal: Mar 2006
Città: Molfetta
Messaggi: 239
Quote:
Originariamente inviato da Dr Nick Riviera Guarda i messaggi
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
Codice:
Form1 frm = new Form1();
// frm.Show();
int valore= frm.val2;
Non hai ancora compreso il paradigma della programmazione ad oggetti. Dichiarare come public significa poterci accedere dall'esterno, non poterci accedere dappertutto.
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;
devi dichiararla statica in questo modo
Codice:
public static int val2 = 0;
ma le variabili/metodi/proprietà statiche hanno alcune limitazioni rispetto a quelle normali.
__________________

Ultima modifica di whiles_ : 25-06-2007 alle 12:05.
whiles_ è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 13:31   #10
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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();
e nel form2 ho questa funzione:

Codice:
public void PassMe()
{
txt9.Text = passaggio;
foreach (char mypass in passaggio)
{
int passage = Convert.ToInt32(mypass);
int z1 = Convert.ToInt32(passage * 3);
}
io vorrei che il valore di z1 tornasse nel form1 nella variabile z.. ma non cpaisco perchè qualsiasi cosa io faccia mi dà errore, anche mettendo public int PassMe() invece di void (e sistemando altre cose perchè sennò con quell'int mi dà erroe sulla funzione..

Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 14:29   #11
Strat
Member
 
L'Avatar di Strat
 
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();
   }
}
Form2 con una textbox
Codice:
public partial class Form2 : Form{

   private void Form2_Load(object sender, EventArgs e){
      textBox1.text = Form1.str;

   }
}
La variabile str la dichiari static come ha detto whiles_ in modo da non dover istanziare un oggetto per richiamarla.

Lo adatti al tuo caso e sei a posto!

Ciao!!!
Strat è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 15:18   #12
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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);
}
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 16:16   #13
Strat
Member
 
L'Avatar di Strat
 
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 ... ;
Strat è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 20:32   #14
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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()")
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2007, 20:49   #15
whiles_
Member
 
L'Avatar di whiles_
 
Iscritto dal: Mar 2006
Città: Molfetta
Messaggi: 239
Quote:
Originariamente inviato da Dr Nick Riviera Guarda i messaggi
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()")
Perchè devi sempre fare riferimento all'altra classe! Se scrivi solo return z il compilatore non capisce dove si trova questa variabile z (essendo in una classe differente) e da errore. Una variabile si può richiamare col suo nome quando solo quando è stata definita in una determinata classe e viene richiamata all'interno della classe stessa, in tutti gli altri casi si utilizza NomeIstanza.Variabile o NomeClasse.Variabile. Ad esempio, quando ti riferisci alla proprietà Text di una textbox, scrivi:
Codice:
TextBox1.Text = "bla bla bla";
, mentre quello che stavi cercando di fare tu richiamando la variabile dall'esterno solo col suo nome è come fare
Codice:
Text = "bla bla bla";
Il che non significa niente finchè la variabile Text non è dichiarata all'interno della classe in cui viene usata.
Capito?
__________________
whiles_ è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2007, 11:55   #16
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
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'..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
Xbox Game Pass, ecco i giochi in arrivo ...
Chery chiude il primo semestre 2026 con ...
Anthropic supera OpenAI nei ricavi a poc...
Un malware Android trafuga i dati anche ...
GrapheneOS accusa Google di aver complic...
Unitree: il robot Superman tocca 12,66 m...
Samsung rincara i wafer fino al 15%, all...
Etched, la startup dei chip per l’infere...
Internet all'estero spendendo meno: i pi...
Mutiny, nuovo film con Jason Statham esc...
GTA 6 vale due anni di ferma: l'Esercito...
Stripe si prende il più grande ro...
Seasonic Prime Enterprise RX-1600: 95% d...
Linux 7.3 abilita i Mac M3 di fascia alt...
Black Myth: Zhong Kui, 15 minuti di game...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v