Ciao
come dice MSDN, CloseReason è una proprietà di FormClosingEventArgs, che è il tipo del parametro e passato alla gestione dell'evento FormClosing. Quindi è impossibile ottenere la proprietà CloseReason dal parametro e dell'evento Validated che è di tipo EventArgs (da cui deriva FormClosingEventArgs)
Poichè l'evento Validated della tua TextBox si verifica prima dell'evento FormClosing della Form, non puoi eseguire nell'evento Validated il controllo se il Form sta per essere chiuso. Facendo delle prove sono riuscito a risolvere il tuo problema con un timer: invece che mostrare direttamente la form all'evento Validated, ho impostato un timer in modo che venga fatto partire all'evento validated. In questo modo nell'intervallo di tempo in cui il timer si sta "caricando", il form ha il tempo di chiudersi senza visualizzare il FormDialog:
private void tb_Validated(object sender, EventArgs e)
{
if (tb.Text == "Prova")
{
//Faccio partire il timer.
//Se hai cliccato il pulsante di chiusura
//viene generato automaticamente l'evento FormClosing
//e l'applicazione si chiude ignorando il timer
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
//Fermo il timer in modo da non mostrare più volte la form
timer1.Stop();
//Inizializzo la form e la visualizzo
Form fm = new Form();
fm.ShowDialog();
}
Luca