View Full Version : [C#] Passare un valore da Form2 a Form1 dopo la chiusura
qwerty_race
30-01-2021, 09:41
Salve,
in un programma Win Form ho 2 form,
Form1 (form principale) e Form2 (form secondario),
devo passare il valore da Form2 a Form1, solo che Form2 è un Dialog e quindi si chiude,
come invio una string[] al Form1??
antonio338
30-01-2021, 13:40
Per recuperare la tua string[] basta che la imposti come proprietà pubblica del Form2
public string[] Stringhe {get;set;}
Siccome il metodo ShowDialog() blocca l'esecuzione del codice, basta che utilizzi la proprietà pubblica dell'istanza del form.
Form form2 = new Form2();
form2.ShowDialog(); //qui il codice si blocca fino a quando Form2 non è chiuso
var Stringhe = form2.Stringhe;
Puoi usare la proprietà DialogResult di Form per decidere se hai bisogno di recuperare o no dei valori (ad es. se l'utente clicca su OK piuttosto che Annulla)
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.dialogresult?view=net-5.0
qwerty_race
31-01-2021, 10:22
Per recuperare la tua string[] basta che la imposti come proprietà pubblica del Form2
public string[] Stringhe {get;set;}
Siccome il metodo ShowDialog() blocca l'esecuzione del codice, basta che utilizzi la proprietà pubblica dell'istanza del form.
Form form2 = new Form2();
form2.ShowDialog(); //qui il codice si blocca fino a quando Form2 non è chiuso
var Stringhe = form2.Stringhe;
Questo lo avevo già fatto ma non mi ha funzionato, ho fatto il Debug con un punto di interruzione ma quando andavo avanti con F10, arrivati a "var Stringhe = form2.Stringhe;" non aveva nessun valore, il Form2 non gli passava nulla, non so il motivo.
Ho risolto creando una classe pubblica:
namespace my_namespace
{
public class MyClass
{
public string[] myString{ get; set; }
}
}
Creo l'istanza di MyClass nel Form1 e passo l'istanza creata attraverso al costruttore di Form2, passando in fine il mio array alla proprietà myString e recuperandone poi il valore dal Form1
antonio338
03-02-2021, 18:20
A quanto pare per farlo funzionare bisogna impostare esplicitamente la proprietà DialogResult nel Form2;
Form form2 = new Form2();
if (form2.ShowDialog() == DialogResult.OK)
{
var stringhe = form2.stringhe;
}
mentre nel Form2 il bottone OK sarà:
DialogResult = DialogResult.OK;
Close();
Facendo cosi però il valore verrà passato solo se si clicca quel tasto.
qwerty_race
03-02-2021, 18:25
antonio338
Ti ringrazio, molto utile anche questa variante.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.