У вас должно получиться хорошо, если вы держитесь за сами объекты форм.
Другими словами, просто используйте переменные, чтобы сохранить ссылки на сами формы, а затем держитесь за них даже после возврата ShowDialog (при условии, что вы хотите показать их модально).
Пример кода:
private SampleForm m_oSamp1;
private SampleForm m_oSamp2;
private void SampleParentFunction()
{
if (m_bShowForm1)
{
m_oSamp1.ShowDialog();
m_bShowForm1 = false;
}
else
{
m_oSamp2.ShowDialog();
m_bShowForm1 = true;
}
}
Данные в отдельных формах на 100% независимы и сохраняются, если вы сделаете это следующим образом.