Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Kruger177
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 21
1

Как устроены события?

19.05.2014, 23:44. Просмотров 702. Ответов 16
Метки нет (Все метки)

Привет!
Можете, пожалуйста, рассказать про то, как устроены события, как происходит сам процесс объявления и обработки события в Visual Studio.
Про то, какой командой что откуда и куда передает "сигнал", что надо делать (типа взаимодействие объекта и формы).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 23:44
Ответы с готовыми решениями:

Как устроены аудиопроигрыватели,видеопроигрыватели?(т.е программы)
Видел код фотки,куча цифр со странными числами в 16-тиричной системе. Как это всё устроено?

Почему если делегат события определен в другом классе, то не получается создать генерацию события?
В проекте №1 объявлен делегат для события: delegate void StateEventHandler(State state); А в...

Для чего использовать ключевое слово event в объявлении события, если события — это те же самые делегаты
Господа, скажите пожалуйста, для чего использовать ключевое слово event в объявлении события, если...

Вызов события из другого события по нажатию клавиши
Всем привет! Есть кнопка на Windows.Forms, к ней привязано событие. Хочется, чтобы еще и по нажатию...

Как устроены проекты VS
Подскажите плиз, как организована прога в VS? И определения что такое solution, project и тд? Как...

16
Driwars
70 / 61 / 33
Регистрация: 03.09.2013
Сообщений: 306
19.05.2014, 23:53 2
В визуал событие объявляется при двойном клике по имени события конкретного контролла, перекидывает сразу в метод обработчика события. Или ручками.
Примерно так
C#
1
2
3
4
5
checkBox7.CheckedChanged += new System.EventHandler(checkBox7_CheckedChanged);
 
private void checkBox7_CheckedChanged(object sender, EventArgs e)
         {
          }
сигнал никуда не передаётся. Первая строка кода подписывает на событие, вторая часть выполняется при срабатывании этого события.
В данном примере код сработает при установке и снятии галочки с чекбокса.
0
Водяной Змей
Заблокирован
20.05.2014, 22:41 3
События принадлежат к какому-то классу и вызываются из его объектов (или самого класса) функциями данного класса.
При каждом таком вызове выполняется обработчик события (скажем, checkBox7_CheckedChanged), расположенный в другом классе, например, в форме.

Вот простой пример.
Как работает:
Создаётся объект класса Balloon.
На его событие YChanged подписывается обработчик balloon1_YChanged (он будет вызван при каждом вызове события).
Вызывается метод Fly() объекта класса Balloon.
В этом методе выполняется бесконечный цикл, на каждом проходе которого увеличивается свойство шарика - высота y, и вызывается YChanged.
Благодаря вызову YChanged (= balloon1_YChanged) форма при каждом проходе узнаёт значение y и выводит его в label.
0
Вложения
Тип файла: zip WindowsFormsApplication3.zip (63.7 Кб, 4 просмотров)
Rock_STAR
Заблокирован
20.05.2014, 22:52 4
Довольно интересно а как насчет передачи параметра в событие?
0
20.05.2014, 22:52
Водяной Змей
Заблокирован
20.05.2014, 23:22 5
Rock_STAR,
а как насчет передачи параметра в событие?
Вы спрашиваете или троллите?
Если троллите, то как насчёт того, чтобы сперва дать свой ответ на вопрос, вместо того чтобы тупо посылать к какому-то шилдту? Я прекрасно знаю, что такое EventArgs и с чем его едят, но ТС этого не спрашивала, не нужно её грузить всяким оффтопом.
0
Rock_STAR
Заблокирован
21.05.2014, 12:00 6
Вот такое отношение ко всем у всех я просто спросил...
0
tezaurismosis
Администратор
Эксперт .NET
8680 / 3966 / 734
Регистрация: 17.04.2012
Сообщений: 8,728
Записей в блоге: 14
21.05.2014, 13:55 7
Цитата Сообщение от Rock_STAR Посмотреть сообщение
Довольно интересно а как насчет передачи параметра в событие?
А что именно вас интересует в этом вопросе?
В само событие ничего не передаётся - оно не принимает параметров, параметры принимаются методом, который привязан к событию в качестве обработчика. В примере Driwars, это метод checkBox7_CheckedChanged

Не по теме:

Цитата Сообщение от Rock_STAR Посмотреть сообщение
Вот такое отношение ко всем у всех
Не ко всем и не у всех, только у некоторых.

0
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,104
Записей в блоге: 2
21.05.2014, 14:25 8
tezaurismosis, он наверное имел ввиду не параметр, а аргумент события.
0
tezaurismosis
Администратор
Эксперт .NET
8680 / 3966 / 734
Регистрация: 17.04.2012
Сообщений: 8,728
Записей в блоге: 14
21.05.2014, 15:04 9
insite2012, если так, то Передача аргументов в событиях
0
Metall_Version
2124 / 1261 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
21.05.2014, 17:22 10
Цитата Сообщение от Rock_STAR Посмотреть сообщение
Довольно интересно а как насчет передачи параметра в событие?
самое просто делать свой класс аргумента наследуя его от EventArgs
в этом классе делаем поля - наши параметры

потом при создании события передаем аргументы события через наш класс

пример из старого класса который формирует екселевский документ из БД . и сообщает о сохранении (успешно или нет)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MyExcelCreater
{
    public event EventHandler<MyEventArgs> SaveComplete;     //событие которое свидетельствует о том что сохранение завершено
    // всякие поля и методы
   ///
    private void SaveFile()     //метод сохранения файла
        {
            try
            {
                //сохраняем документ
                var myevent = new MyEventArgs();
                myevent.message = "Сохранение прошло успешно";
                myevent.icon = MessageBoxIcon.Asterisk;
                SaveComplete(this,myevent);    //инициализируем событие завершения сохранения
            }
            catch 
            {
                //закрываем приложение екселя, освобождаем все ресурсы
 
                var myevent =  new MyEventArgs();
                myevent.message ="Файл не был сохранен. Дериктория не была найдена, или недоступна из-за уровня защиты";
                myevent.icon = MessageBoxIcon.Warning;
                SaveComplete(this, myevent);    //инициализируем событие неуспешного сохранения
            }
    }
}
 
public class MyEventArgs : EventArgs   // Производный собственный класс от EventArgs 
    {
        public string message;      //данные о завершении сохранения
        public MessageBoxIcon icon; //данные о иконке для вывода 
    }
3
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,104
Записей в блоге: 2
21.05.2014, 17:56 11
Metall_Version, все бы хорошо, но не могу не внести два замечания.
1. Перед вызовом события нет проверки на null;
2. Наличие var там, где это совершенно не нужно. Лучше использовать строгую типизацию, а var оставить для тех случаев, где без него не обойтись.
0
Metall_Version
2124 / 1261 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
21.05.2014, 17:58 12
Цитата Сообщение от insite2012 Посмотреть сообщение
1. Перед вызовом события нет проверки на null;
не понял , что проверять?

Цитата Сообщение от insite2012 Посмотреть сообщение
2. Наличие var там, где это совершенно не нужно.
могу поспорить -var тут ни на что не влияет , код будет идентичный , а var куда короче MyEventArgs , и сразу понятно что это за тип
0
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,104
Записей в блоге: 2
21.05.2014, 18:12 13
Цитата Сообщение от Metall_Version Посмотреть сообщение
не понял , что проверять?
Если никто не подпишется на это событие, будет исключение.
Цитата Сообщение от Metall_Version Посмотреть сообщение
var куда короче MyEventArgs , и сразу понятно что это за тип
Как сказать... Стараюсь следовать правилам хорошего (с точки зрения уважаемых авторов) написания кода...
2
Metall_Version
2124 / 1261 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
21.05.2014, 18:23 14
Цитата Сообщение от insite2012 Посмотреть сообщение
1. Перед вызовом события нет проверки на null;
+1

Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
Стараюсь следовать правилам хорошего (с точки зрения уважаемых авторов) написания кода...
именно поэтому так и писал все знакомые разработчики так пишут , многие примеры с разных сайтов по шарпу.(stackoferflow)
1
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,104
Записей в блоге: 2
21.05.2014, 18:27 15
Цитата Сообщение от Metall_Version Посмотреть сообщение
все знакомые разработчики так пишут
К сожалению, у меня нет (кроме этого форума) знакомых разработчиков, кодинг-не моя в общем-то стезя, но Троелсен для меня - авторитет.
Что касается вопроса ТС: советую начинать изучение не с событий, а с делегатов и уже от них переходить к событиям, поскольку события по сути - те же делегаты и есть. Это лишь сокращение в написании кода.
0
tezaurismosis
Администратор
Эксперт .NET
8680 / 3966 / 734
Регистрация: 17.04.2012
Сообщений: 8,728
Записей в блоге: 14
21.05.2014, 18:32 16
insite2012, видимо использование var или имени типа в ситуациях где var не необходим - это как предпочтения в оформлении кода - отступы, скобки и т.д.
Если имя типа длинное - пишу var, иначе само имя.
0
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,104
Записей в блоге: 2
21.05.2014, 18:36 17
tezaurismosis, возможно... Отступы у меня Студия делает, а var я применяю только в LINQ. Это мне и для тренировки полезно, больше печатаю, поскольку печатаю всего двумя пальцами, никак не научусь.
0
21.05.2014, 18:36
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 18:36

Как устроены чаты?
Всем привет. Я раньше никогда не висел на чатах, а тут случайно попал, мне стало интересно как они...

Как устроены массивы
Здрасте! Прочитал на сайте про $_SERVER &quot;... в него PHP-интерпретатор помещает переменные,...

Как устроены игры?
Есть ли книга или руководство на русском, в котором объясняется как устроены компьютерные игры? Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru