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

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

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

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

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

Как у вас устроены переходы между UserControl и обратно
Всем доброго дня. Вопрос состоит в правильной структуре программы. У меня есть несколько Армов, в...

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

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

16
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 просмотров)
Заблокирован
20.05.2014, 22:52 4
Довольно интересно а как насчет передачи параметра в событие?
0
Заблокирован
20.05.2014, 23:22 5
Rock_STAR,
а как насчет передачи параметра в событие?
Вы спрашиваете или троллите?
Если троллите, то как насчёт того, чтобы сперва дать свой ответ на вопрос, вместо того чтобы тупо посылать к какому-то шилдту? Я прекрасно знаю, что такое EventArgs и с чем его едят, но ТС этого не спрашивала, не нужно её грузить всяким оффтопом.
0
Заблокирован
21.05.2014, 12:00 6
Вот такое отношение ко всем у всех я просто спросил...
0
Администратор
Эксперт .NET
8852 / 4125 / 741
Регистрация: 17.04.2012
Сообщений: 8,955
Записей в блоге: 14
21.05.2014, 13:55 7
Цитата Сообщение от Rock_STAR Посмотреть сообщение
Довольно интересно а как насчет передачи параметра в событие?
А что именно вас интересует в этом вопросе?
В само событие ничего не передаётся - оно не принимает параметров, параметры принимаются методом, который привязан к событию в качестве обработчика. В примере Driwars, это метод checkBox7_CheckedChanged

Не по теме:

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

0
Модератор
Эксперт .NET
5101 / 4003 / 1152
Регистрация: 12.10.2013
Сообщений: 11,637
Записей в блоге: 2
21.05.2014, 14:25 8
tezaurismosis, он наверное имел ввиду не параметр, а аргумент события.
0
Администратор
Эксперт .NET
8852 / 4125 / 741
Регистрация: 17.04.2012
Сообщений: 8,955
Записей в блоге: 14
21.05.2014, 15:04 9
insite2012, если так, то Передача аргументов в событиях
0
2132 / 1269 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
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
Модератор
Эксперт .NET
5101 / 4003 / 1152
Регистрация: 12.10.2013
Сообщений: 11,637
Записей в блоге: 2
21.05.2014, 17:56 11
Metall_Version, все бы хорошо, но не могу не внести два замечания.
1. Перед вызовом события нет проверки на null;
2. Наличие var там, где это совершенно не нужно. Лучше использовать строгую типизацию, а var оставить для тех случаев, где без него не обойтись.
0
2132 / 1269 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
21.05.2014, 17:58 12
Цитата Сообщение от insite2012 Посмотреть сообщение
1. Перед вызовом события нет проверки на null;
не понял , что проверять?

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

Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
Стараюсь следовать правилам хорошего (с точки зрения уважаемых авторов) написания кода...
именно поэтому так и писал все знакомые разработчики так пишут , многие примеры с разных сайтов по шарпу.(stackoferflow)
1
Модератор
Эксперт .NET
5101 / 4003 / 1152
Регистрация: 12.10.2013
Сообщений: 11,637
Записей в блоге: 2
21.05.2014, 18:27 15
Цитата Сообщение от Metall_Version Посмотреть сообщение
все знакомые разработчики так пишут
К сожалению, у меня нет (кроме этого форума) знакомых разработчиков, кодинг-не моя в общем-то стезя, но Троелсен для меня - авторитет.
Что касается вопроса ТС: советую начинать изучение не с событий, а с делегатов и уже от них переходить к событиям, поскольку события по сути - те же делегаты и есть. Это лишь сокращение в написании кода.
0
Администратор
Эксперт .NET
8852 / 4125 / 741
Регистрация: 17.04.2012
Сообщений: 8,955
Записей в блоге: 14
21.05.2014, 18:32 16
insite2012, видимо использование var или имени типа в ситуациях где var не необходим - это как предпочтения в оформлении кода - отступы, скобки и т.д.
Если имя типа длинное - пишу var, иначе само имя.
0
Модератор
Эксперт .NET
5101 / 4003 / 1152
Регистрация: 12.10.2013
Сообщений: 11,637
Записей в блоге: 2
21.05.2014, 18:36 17
tezaurismosis, возможно... Отступы у меня Студия делает, а var я применяю только в LINQ. Это мне и для тренировки полезно, больше печатаю, поскольку печатаю всего двумя пальцами, никак не научусь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2014, 18:36

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

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

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

Как устроены словари dict?
Добрый день. Учу питон и столкнулся с такой особенностью: d={'a': '123', 'b': 'qwe', 'c':...

Как устроены оси в Unity?
но при этом Так же по оси х возрастает впрво, проверил( персонаж движется вправо - х...

Как вообще устроены приложения по генерации?
Добрый день! Мне стало интересно как устроены приложения для генерирования виртуальных номеров для...

Как у вас двумерные вектора устроены?
Вектор представляет собой последовательность объектов с динамическим размером, которая обеспечивает...


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

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

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