Γιώργο, αν δεν επιστρέψει η ShowDialog δεν πρόκειται να γίνει destroy η f. Αν π.χ. δεν υπάρχει η f_Resize, η Child φόρμα μπορεί άνετα να γίνει minimize χωρίς να επιστρέψει η ShowDialog. Όπως φαίνεται και σε αυτό το thread στο MSDN, όταν η parent φόρμα γίνεται minimize, κλείνει και η child. Η συμπεριφορά αυτή είναι by-design. Η λύση που προτείνει όμως το thread δουλεύει: Αντί για τη ShowDialog, καλούμε τη Show αφού πρώτα κάνουμε Disable την parent form. Μετά, στο FormClosed event της child, επανενεργοποιούμε την parent.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
void f_Resize(object sender, EventArgs e)
{
Form f = sender as Form;
if (f.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Minimized;
}
else
{
this.WindowState = FormWindowState.Normal;
}
}
private void button1_Click(object sender, EventArgs e)
{
Form f = new Form();
f.Resize += new EventHandler(f_Resize);
this.Enabled = false;
f.FormClosed += new FormClosedEventHandler(f_FormClosed);
f.Show();
}
void f_FormClosed(object sender, FormClosedEventArgs e)
{
this.Enabled = true;
}
}
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos