В каждом случае есть одна форма, которая представляет жизнь вашего приложения. Эта форма будет запущена в вашем файле Program.cs
по телефону
Application.Run(new MyForm());
Если вы попытаетесь запустить в этой форме еще одну, и это впоследствии убьет его создателя, это всегда приведет к плохим конструкциям.
Вместо этого вы должны создать некоторую супер-форму . Он невидим и содержит связующий код между этими двумя формами. Сразу после запуска он создает обе формы и показывает первую. Кроме того, он регистрируется в (самописном) событии в обеих формах, которое утверждает, что показывает другое. Если ваша невидимая форма получает событие из одной формы, она просто делает отправителя невидимым и отображает другую.
Последнее, но не менее важное, что вам нужно в обеих (или хотя бы в одном) формах второго события, которое закроет суперформу, закрывающую приложение.