I use this trick. Lets say form1 is the main form:
private void button1_Click(object sender, EventArgs e)
{
LoadForm(new Form2());
}
private void LoadForm(Form frm)
{
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
this.Hide();
// Here you can set a bunch of properties, apply skins, save logs...
// before you show any form
frm.Show();
}
void frm_FormClosed(object sender, FormClosedEventArgs e)
{
this.Show();
}
Therefore; when you open any form closed (except form1), form1 will reappear again.
Update
using (Form2 frm = new Form2())
{
if (frm.ShowDialog() = DialogResult.ok)
{
//Do some things...
}
}
In this case there is no need to hide previous form.