@GromWolf

Как работать с делегатами?

Доброе время суток.
Проблема такая: есть UserControl на нем используются кнопки, нажатие на которые изменяет что то на форме. Для этого необходимо пользоваться делегатами, как я узнал, но делегаты тема не простая как оказалось, не могу понять как ими работать. Есть у кого нибудь живой пример, который мне поможет понять соль
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
Morpheus_God
@Morpheus_God
У вас есть класс к примеру
namespace WindowsFormsApp1
{
    public delegate void GetMessage(string message);
    public class EventTest
    {
        public event GetMessage _msg;
        public void Test(int a)
        {
            if(a > 3)
            {
                _msg?.Invoke($"{a} > 3");
            }else
            {
                _msg?.Invoke("Не понятно");
            }
        }
    }
}

В рамках namespace объявлен делегат с типом void и входящим параметром string.
В самом классе есть событие и обычный метод, который при входящем параметре int проводит сравнение и для вывода информации ссылается на событие созданное выше .
Вот форма.
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        EventTest test = new EventTest();

        public Form1()
        {
            InitializeComponent();

            test._msg += Test__msg;
        }

        private void Test__msg(string message)
        {
            label1.Text = message;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int a = Int32.Parse(textBox1.Text);
            test.Test(a);
        }
    }
}

На форме подписывается событие и при возникновении события в классе, передается на форму.
Почитайте еще здесь, тут примеры есть.
Ответ написан
@checkifitworththat
Делегаты могут объеденять функционал(по анологичным входящим параметрам) нескольких методов в одном методе.Ивент тот же делегат передаёт события в аргументе.И сендер объект который их передаёт.

if (string.IsNullOrEmpty(value))
{
throw new ArgumentException("Name cannot be null or empty");
}

if (_name != value && NameChanged != null)
{
NameChangedEventArgs args = new NameChangedEventArgs();
args.ExistingName = _name;
args.NewName = value;

NameChanged(this, args);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы