У вас может быть блок catch на верхнем уровне вашей программы, который будет отображать форму с соответствующими деталями ошибки.Или вы можете перехватывать необработанные исключения с помощью Application.UnhandledException (при условии, что вы используете winforms), Application.ThreadException и AppDomain.UnhandledException.
Если вы хотите, чтобы окно сообщения отображалось при возникновении, обработке или отсутствии любого исключениятогда вам придется либо явно писать код в каждом блоке перехвата, чтобы показать форму, либо использовать что-то вроде PostSharp для переплетения кода, который показывает форму всякий раз, когда выдается исключение.