Эта статья, хотя и не совсем та, о которой вы спрашиваете, была очень полезна, когда я занимался редизайном приложения .NET CF: Создание инфраструктуры приложений с несколькими формами для .NET Compact Framework
Моему приложению требовалось немного из обоих миров - я хотел, чтобы была открыта одна форма, но также иногда хотел поместить вторую вторичную форму поверх первой (например, если они переходят на страницу Prefs или какой-либо другой тип форма, где они должны только когда-либо отклонить это через мгновение).
(Псевдокодирование после этого)
Я создал ViewManager и реализовал его как синглтон. Когда приложение запускается впервые, я вызываю ViewManager.GotoForm (frm). Это устанавливает текущую форму в любую нужную мне форму.
Затем я немедленно вызываю ViewManager.CurrentForm.ShowDialog () - я уверен, что есть лучший способ, но я обнаружил, что мне нужно было вызвать ShowDialog () в НЕКОТОРОЙ точке просто для того, чтобы появилась форма.
Последующие вызовы ViewManager могут принимать форму .ReplaceForm или .StackForm. Различия должны быть довольно интуитивными.
То, что вы также можете сделать в диспетчере представлений, как это, это формы кеша, которые не отображаются, но, вероятно, будут снова и требуют больших затрат на настройку (например, в приложении, управляемом данными, вам, возможно, придется запросить базу данных, чтобы определить, поля или таблицы для отображения в форме, и это не изменится во время выполнения).
Хитрость в том, что вы никогда не вызываете .Show () или .ShowDialog () в любом месте вашего приложения - вы направляете всю навигацию по формам через менеджер представлений, который обрабатывает загрузку следующего экземпляра вашей формы, удаляя старые формы (если они не кэшируются) ) и отправляет любые виды логики заполнения, если вы хотите передать новые данные в пользовательский интерфейс формы перед ее загрузкой.