Your main form should be the "switchboard", keeping track of form lifetimes. First Form3, it should declare an event: public partial class Form3 : Form { public EventHandler RequestForm2; public Form3() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { RequestForm2(this, EventArgs.Empty); } } Now the main form: public partial class Form1 : Form { public Form1() { InitializeComponent(); } Form2 mForm2; private void showForm2() { if (mForm2 == null) { mForm2 = new Form2(); mForm2.FormClosed += mForm2_FormClosed; mForm2.Show(); } else { mForm2.WindowState = FormWindowState.Normal; mForm2.Focus(); } } void mForm2_FormClosed(object sender, FormClosedEventArgs e) { mForm2 = null; } private void button1_Click(object sender, EventArgs e) { showForm2(); } private void button2_Click(object sender, EventArgs e) { Form3 frm = new Form3(); frm.RequestForm2 += Form3_RequestForm2; frm.Show(); } private void Form3_RequestForm2(object sender, EventArgs e) { showForm2(); } }
Hans Passant. |