Хорошо, я буду сопротивляться моему очень сильному желанию сказать вам, что это неправильно, и вы не должны использовать ShowDialog. Теперь, когда я этого не сказал, давайте посмотрим, что происходит.
Ваше приложение вызывает Application.Run в какой-то момент. Это устанавливает насос сообщений, который отправляет события Windows в соответствующие Windows (элементы управления) в системе.
Когда вы вызываете ShowDialog, система настраивает другой временный насос сообщений. Это означает, что события Windows, поступающие в этот насос, не будут отправляться извне другим элементам управления (так вы получаете модальность).
Теперь вы говорите, что вам нужно выложить еще одно диалоговое окно поверх этого (таким образом, создав еще один насос), но вам нужно, чтобы оно появлялось после некоторого кода инициализации в первом диалоге (а не в общей родительской форме) был отображен.
Это все правильно? Если так, я думаю, что есть два пути, на которые я бы посмотрел. Сначала я бы посмотрел на переопределение OnActivation в первом диалоге. Поскольку вы используете ShowDialog, я думаю, что это было бы почти синонимом события Shown.
Если это не совсем то, что вы хотите, то я бы посмотрел на добавление MessageWindow в первый диалог (или использование NativeWindow SDF для его подкласса ) и посмотрите на все входящие сообщения Windows, чтобы предоставить ваше собственное событие Shown.