@GromWolf

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

Доброе время суток.
Проблема такая: есть UserControl на нем используются кнопки, нажатие на которые изменяет что то на форме. Для этого необходимо пользоваться делегатами, как я узнал, но делегаты тема не простая как оказалось, не могу понять как ими работать. Есть у кого нибудь живой пример, который мне поможет понять соль
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
  • Moreha
    @Moreha
    У вас есть класс к примеру
    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
Похожие вопросы