Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2013, 19:25   #1
Kirsan94
 
Регистрация: 25.06.2012
Сообщений: 3
По умолчанию Делегаты и события

Доброго времени суток!
Я студент МИФИ, поучил задание по информатике:
Задание 4:
Реализовать оконное приложение, демонстрирующее работу многоадресной передачи. Создать кнопки Add и Delete, добавляющие и удаляющие методы в цепочку вызовов соответственно.
Указание: взять за основу приведенный пример, добавить обработчики ошибок.

Задание 5:
Модифицировать приложение из предыдущего задания. Цепочка методов должна собирать строку из слов в поле на форме и выводить полученную строку на экран, используя MessageBox один раз. Информировать пользователя о количестве методов в цепочке.
Указание: подумать.

Проблема такая - Мне нужно ведь сделать так, что-бы после нажатия кнопки Add происходило добавление функции в очередь делегата, а функция должна "запоминать" содержимое строки, что-бы потом при вызове делегата, внесённые в очередь функции, по-очереди собирали строку, из того что запомнили?
Если так, то как мне сделать, что-бы каждая вкладываемая в очередь функция запоминала строку?
Там же например
Код:
        delegate void Deleg(string s);
        Deleg Del;
        private void button1_Click(object sender, EventArgs e)
        {
            Del += new Deleg(talk);
        }
Где talk - функция с 1 командой:
Код:
textBox2.Text+=s;
как мне запомнить эти s? Может мне в массив запоминать, а делегату передавать этот массив? А функцию переделать так, что-бы она использовала ячейку массива под номером i, который задать вне функции, и в самой функции увеличивать на 1? А сам массив заполнять при нажатии кнопки Add?
Может есть вариант более относящийся к использованию делегатов и событий?
Kirsan94 вне форума Ответить с цитированием
Старый 02.12.2013, 19:07   #2
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

У Вас НЕ получится передать каждому делегату свой параметр.
Многоадресная передача - это когда один и тот же параметр передают многим.

Надо алгоритм "склеивания строки" как то подробнее прописать.

Вы бы не стеснялись и хотя бы пример основу сюда выложили. А лучше уже Ваш вариант (переработанный под задание).

Последний раз редактировалось simples; 02.12.2013 в 19:11.
simples вне форума Ответить с цитированием
Старый 03.12.2013, 08:11   #3
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Не совсем уверен, что это то, что вам нужно по заданию, но есть такая вещь, как анонимные делегаты (можно то же самое сделать лямбда выражениями - удобнее). Только, как сказал simples, передача параметра тут будет ни при чём, а соответственно и делегат другой.
Код:
 delegate void Deleg();
Deleg Del;
...
//обработчик Add
var text = textBox1.Text;//эта строчка нужна, без неё не заработает!
Deleg action = delegate() { textBox2.Text += text; };
Del += action;
...
//вызов
Del();
Немного другой синтаксис и масса подводвых камней, но очень полезная вещь. Важно не забыть указанную строчку, так как иначе доступ к полю текста произойдёт только во время вызова метода (то есть когда должен будет выводитсья результат), а значит значение textBox1.Text везде было бы одинаковое. А тут значение локальной переменной уникальное для каждого вызова. (Больше информации об этом можно гуглить по "Access to modified closure")
Изобретатель велосипедов

Последний раз редактировалось Selestis; 03.12.2013 в 08:16.
Selestis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делегаты Skif-F Microsoft Office Excel 5 25.01.2012 15:08
Делегаты C# sir.andrey Помощь студентам 3 21.09.2011 10:06
MinGW, Делегаты. Пепел Феникса Общие вопросы C/C++ 14 28.07.2011 19:42
Делегаты CaypoH Общие вопросы .NET 3 04.01.2011 05:43
События и делегаты в C# как они работают _PROGRAMM_ Общие вопросы .NET 11 04.02.2010 06:44