Ciao
Non funziona perchè il form d'avvio non viene dichiarato come campo: se guardi nella classe Program (il file program.cs), nella static void main c'è un'istruzione
Application.Run(new Form1());
Ti propongo diverse soluzioni, poi vedi tu quale è quella che più ti piace :
1) Dichiarare un campo statico globale di tipo Form1, inizializzarlo nella void main e da lì lanciarlo. Quindi per accedere da form2 usi il campo:
static class Program
{
static Form1 mainForm;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mainForm = new Form1();
Application.Run(mainForm);
}
}
2) Incapsulare nella Form2 una proprietà SenderForm di tipo Form che imposti quando chiami il form2 da form1. Eseguendo il cast su Form1 puoi ottenere ed impostare i controlli del form chiamante.
3) Fare un ciclo su Application.OpenForms, verificare quale sia il form di cui hai bisogno, e quindi impostare i controlli.
4) Aggiungere un evento nel form2 che viene generato quando devi cambiare dei controlli di Form1. Sottoscrivi questo evento da form1, (nel quale hai dichiarato un'istanza di Form2), e quando l'evento viene generato, passando gli opportuni parametri, imposti i controlli come ti servono. Ti scrivo un esempio:
namespace TuoNamespace
{
//Il metodo di gestione dell'evento ChangeRequested
//Naturalmente puoi adattarlo come ti serve meglio
public delegate void ChangeRequestedEventHandler(string nome, string nuovoValore);
public class Form2 : Form
{
...
//L'evento che viene generato quando devi fare un cambiamento
public event ChangeRequestedEventHandler ChangeRequested;
//Quando fai click su un bottone chiedi a form1 di cambiare
//il testo della label1
private void button_Click(object sender, EventArgs e)
{
if (ChangeRequested != null)
{
//Invochi l'evento
ChangeRequested("Label1", "Testo cambiato tramite evento");
}
}
}
public class Form1 : Form
{
...
Form2 fm2;
public Form1()
{
InitializeComponent();
//Sottoscrivo l'evento
fm2.ChangeRequested += new ChangeRequestedEventHandler(fm2_ChangeRequested);
}
void fm2_ChangeRequested(string nome, string nuovoValore)
{
//Controllo quale sia il controllo da modificare
foreach (Control c in this.Controls)
{
if (c.Name == nome)
{
//Modifico il valore
this.label1.Text = nuovoValore;
}
}
}
}
}
Luca