Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> события и делегаты для кнопки (замена EventArgs), как изменить EventArgs в параметре Click 
:(
    Опции темы
AGENTxXx
Дата 22.4.2016, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: 1
Всего: 1



Всем привет!
Пытаюсь вот до конца вникнуть в события и делегаты, и вроде как увидел след. информацию: 
Цитата

Этот делегат принимает всего лишь два параметра, что явно маловато для универсального делегата. Но все же оказывается, параметров с лихвой хватает для передачи любой информации. Сам по себе класс EventArgs не содержит ни одного интересного члена, способного передавать какую бы то ни было информацию. Он введен лишь для обобщения. Когда необходимо передать дополнительную информацию, вводится новый класс, производный от EventArgs, в котором уже и вводятся поля, передающие необходимую информацию. В одной общей библиотеке у класса EventArgs 100 потомков, и их количество от версии к версии среды исполнения неуклонно растет.

При обращении к событию, имеющему тип данного делегата, в качестве параметра необходимо передать ссылку на текущий объект (this), а во втором параметре экземпляр класса EventArgs или производного от него.

Это цитата из rsdn.

Решил вот сделать что-то подобное (т.е. унаследовать от EventArgs и добавить поля:
Код

public class EvClass : EventArgs
{
       public bool isTrue = false;
       public int second = 2;
}

private void btn_Method(object sender, EvClass e)
{
       textBox1.Text += "2";
}


Но в ответ получаю ошибку на след. строке:
Код

button1.Click += btn_Method;

Возвращаемая ошибка:
Error    1    No overload for 'btn_Method' matches delegate 'System.EventHandler'    c:\users\admin\documents\visual studio 2012\Projects\DelegateExmpl\DelegateExmpl\Form1.cs    23    30    DelegateExmpl

Хотел бы, чтобы пояснили всё же, реально ли это сделать, или такое можно сделать только на полностью "разработанном" объекте в ручную, а забитую информацию в .Net библиотеки уже не поменять и можно использовать только EventArgs? 

Только вроде начал понимать, и опять что-т запутался на этом месте.
PM MAIL   Вверх
infarch
Дата 22.4.2016, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Для начала, событие Клик у кнопки рассчитывает получить вторым параметром именно EventArgs, а не производный класс. Так что вам остается только привести стандартный класс к вашему:

Код

        private void btn_Method(object sender, EventArgs e)
        {
            EvClass ec = e as EvClass;
            System.Console.WriteLine("executed: {0}", ec.second);
        }


И теперь о грустном: в случае обычного клика по кнопке вы поймаете эксепшен. Фреймворк вызывает событие именно с EventArgs, а о ваших производных ему ничего не известно.

Вот если вы сами создаете некое событие у некоего класса, и сами же его вызываете то можете использовать какие угодно параметры, не проблема.

Это сообщение отредактировал(а) infarch - 22.4.2016, 13:42
PM MAIL   Вверх
AGENTxXx
Дата 23.4.2016, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: 1
Всего: 1



А встречались ли случаи, когда EventArgs как-то использовался в коде разработчиком. Просто на сколько я понял, там хранится в основном инфа вспомогательная для самой программы. Просто пока так и не увидел смысла, почему пришли разработчики .Net к такой идеологии... Или типа просто так реализовали и всё?...
PM MAIL   Вверх
infarch
Дата 25.4.2016, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Я использовал в своих поделках. По сути, в своих обработчиках событий вы можете вообще никаких аргументов не юзать, если не надо. Но если вы, например, наследуетесь от некоего стандартного класса и хотите кинуть его событие вручную со своими дополнительными данными, то наследование от EventArgs очень помогает. Ну и для красоты и расширяемости я предпочитаю чтоб все события имели стандартную форму аргументов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1296 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.