Я предпочитаю использовать Generics и ленивую загрузку для обработки моих форм. Поскольку все мои формы наследуются от базового класса, я могу использовать один и тот же метод, чтобы вывести формы на передний план, отправить их на задний план, уничтожить их, запустить их и т. Д.
Если у вас есть класс диспетчера форм, который отвечает за управление любыми загруженными формами, вы можете вывести любую форму вперед, если захотите, или запретить возвращение определенных форм, если не выполнены определенные критерии.
public void LoadForm<T>() where T : MyNameSpace.MyBaseForm
{
// Load all your code in this joint and just call it when you
// need a form. In here, you can determine if a copy of the form
// already exists and then bring it forward or not
}