Делегаты. Windows Forms. Вопрос от новичка

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023

У меня такой вопрос: почему невозможно совершить данное преобразование:

using System;

namespace Learn_Words_WF_Menus
{
    public delegate void Action(object sender, EventArgs e);
}
using System.Windows.Forms;

namespace Learn_Words_WF_Menus
{
    public class EMPTY : ControlMenu
    {
        Button Back_Button;

        public EMPTY(Form form, Action backButton_Click) : base(form)
        {
            Set_Actions(backButton_Click);
        }

        private void Set_Actions(Action backButton_Click)
        {
            Back_Button.Click += backButton_Click; // вот тут выдает ошибку 
            //Ошибка CS0029 Не удается неявно преобразовать тип
            //"Learn_Words_WF_Menus.Action" в "System.EventHandler"
        }
    }
}

Но можно сделать сделать так:

using System.Windows.Forms;

namespace Learn_Words_WF_Menus
{
    public class EMPTY : ControlMenu
    {
        Button Back_Button;

        public EMPTY(Form form, Action backButton_Click) : base(form)
        {
            Set_Actions(backButton_Click);
        }

        private void Set_Actions(Action backButton_Click)
        {
            Back_Button.Click += Click;
        }
        
        private void Click(object sender, EventArgs e)
        {
            //do something
        }
    }
}

Что я делаю неправильно или чего я не понимаю? Заранее спасибо за ответ.

Ответы

▲ 0

В общем. Нашел решение. Состоит оно в том что нужно писать так:

using System;

namespace Learn_Words_WF_Menus
{
    public delegate void Action(object sender, EventArgs e);
}
using System.Windows.Forms;

namespace Learn_Words_WF_Menus
{
    public class EMPTY : ControlMenu
    {
        Button Back_Button;

        public EMPTY(Form form, Action backButton_Click) : base(form)
        {
            Set_Actions(backButton_Click);
        }

        private void Set_Actions(Action backButton_Click)
        {
            Back_Button.Click += backButton_Click.Invoke; // вот решение
        }
    }
}

Почему так? Не знаю. Но это работает. Если кто-то знает, буду благодарен за объяснение. На этом все. Спасибо за внимание.