Не уверен, что именно вы имеете в виду; Form.ShowDialog является только модальным по отношению к родителю, а не к приложению, если только приложение не является однопоточным.
Например, я сделал приложение для тестирования, которое было организовано следующим образом:
MainForm:
2 кнопки, каждая из которых начинает поток, который создает frmDialog1 и вызывает ShowDialog
frmDialog1:
одиночная кнопка, которая создает frmDialog2 и вызывает для него ShowDialog.
frmDialog2:
ничего не делает (т. е. пусто)
когда они все работали, я мог получить доступ / перетащить основную форму. Я мог бы сделать то же самое с frmDialog1 (обе версии), только если бы я не нажал кнопку, которая показывает диалог 2.