@John_Nash
coder

Передача исключения в родительскую форму. Как сделать без костылей?

Форма с двумя кнопками. При нажатии на первую кнопку, вызывается дочерняя кнопка через ShowDialog, обернутое в try-catch. При нажатии на вторую кнопку, исключение должно передаваться в родительскую форму, но это происходит не всегда. Иногда вторая форма ловит необработанное исключение. Как победить, не плодя при этом костылей в виде отказа от throw Exception

using System.Windows.Forms;

namespace WindowsFormsApplication13
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            try
            {
                Form1 a = new Form1();
                a.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            Close();
            throw new NullReferenceException("test");
        }
    }
}
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
DarkRaven
@DarkRaven
разработка программного обеспечения
Вообще, можно оставить так, как у вас. Просто ловить только исключения логики ВАШЕЙ программы.

Остальные можно отдать на откуп глобальным обработчикам:
https://msdn.microsoft.com/en-us/library/system.ap...
https://stackoverflow.com/a/406473

Лично мне предложенный мной вариант не нравится, т.к. обобщенный перехватчик сообщений - это последнее, к чему нужно идти, последняя инстанция.

На мой взгляд, лучше проработать логику. дабы уменьшить вероятность возникновения исключений, перейти на события - т.е. внутри у вашего класса-обработчика есть try..catch, который делает вызов события при ошибке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 апр. 2024, в 12:48
1500 руб./за проект
16 апр. 2024, в 12:30
12000 руб./за проект
16 апр. 2024, в 12:13
10000 руб./за проект