Fabriziog ha scritto:
Il problema è che quando cerco di tornare a form1 il compilatore mi apre un'altra form1 identica a quella già aperta, col risultato di ritrovarmi due form1 aperte.
Il problema principale da risolvere è comprendere la differenza tra
classe e
istanza: .NET non è come il vecchio VB6, e C# è un linguaggio che rispetta i principi della
OOP, ossia della
programmazione orientata agli oggetti.
Tutte le volte che fai
New() stai creando di fatto un nuovo oggetto. L'identificatore
Form1 (nome da cambiare quanto prima, e che deve rispecchiare le finalità della finestra) identifica la classe del Form, ossia il tipo di dato che descrive i comportamenti e le caratteristiche di un ipotetico Form appartenente a questo tipo: prima di usarlo quindi, deve essere istanziato con
New(), ma se è necessario fare riferimento sempre allo stesso Form, il riferimento va memorizzato in una variabile e riutilizzato, senza fare di nuovo
New(), poiché questo comporterebbe la creazione e l'uso di una "nuova istanza" di
Form1, ossia di un nuovo oggetto che si comporta in tutto e per tutto come descritto nella classe di appartenenza ma che si affianca all'istanza già esistente dello stesso tipo, avendo quindi a quel punto due Form uguali.
Si tratta di un concetto fondamentale senza il quale non è possibile programmare in modo sicuro, tranquillo e proficuo con C#, a meno di non introdurre escamotage e altri "giri" con codice che mina alle basi la stabilità dell'applicazione, come in questo caso:
foreach(Form f in Application.OpenForms) {...}
Nel caso in esame inoltre, è meglio far restituire a
Form2 i dati da utilizzare e consentire a Form1 di recuperarli, piuttosto che tentare di impostarli direttamente da
Form2: si evità così un riferimento circolare e una dipendenza inutile tra le due finestre, consentendo potenzialmente anche il riuso di
Form2 in altri contesti.
Fai una ricerca sul forum o sul Web e recupera eventualmente un libro che spieghi questi rudimenti per comprenderli al meglio, altrimenti effetti collaterali di questo tipo ne avrai sempre a non finire.
Ciao!