Вызвать метод формы1 после закрытия формы2

303
11 апреля 2017, 07:39

Есть 2 формы Form1 и Form2. Вторая форма открывается с первой :

  Form2.ShowDialog();

После закрытия второй формы пытаюсь вызвать метод первой формы :

    MaterialCreate("_type")       

Вот так:

    Form2.ShowDialog();
    Form2.FormClosed += new FormClosedEventHandler(MaterialCreate("_type")); // ошибка

На что компилятор выдает ошибку : требуется имя метода. Почему так, ведь имя метода ему указал правильно ?

Answer 1
Form2.FormClosed += new FormClosedEventHandler(MaterialCreate("_type"));

Вы пытаетесь создать делегат типа FormClosedEventHandler, который в качестве агрумента ожидает метод, принимающий два параметра: object sender и FormClosedEventArgs e, а Вы вместо этого пытаетесь передать туда напрямую MaterialCreate(String type). Нужно создать отдельно обработчик для события закрытия формы:

private void OnForm2Closed(object sender, FormClosedEventArgs e)
{
     MaterialCreate("_type");
}

После этого, добавьте обработчик к событию:

Form2.FormClosed += new FormClosedEventHandler(OnForm2Closed);

либо более короткая запись с использованием техники "предположение делегата":

Form2.FormClosed += OnForm2Closed;

UPD:

Кроме того, можете использовать лямбда-выражение, не прибегая к созданию отдельного метода-обработчика, в таком случае просто напишите (самый простой и легко читаемый вариант):

Form2.FormClosed += (sender, e) => MaterialCreate("_type");
READ ALSO
yield с буфером

yield с буфером

Допустим, из итератора извлекается что-то тяжелое или времязатратное

293
C# DDD доступ из Infrastructure к БД

C# DDD доступ из Infrastructure к БД

Всем привет! Вот такой у меня вопросПытаюсь осознать DDD и делаю web приложения на asp

279
Связанный с делегатом объект

Связанный с делегатом объект

На msdn прочитал такой абзац

243