Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75

Обработка событий: где генерируются параметры

26.11.2012, 20:59. Показов 1606. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, изучая обработчики типы собитий(event) и delegate types у меня возник вопрос. в vs2012 например при создании ComboBox автоматически гинерируется следующий код:
C#
1
2
3
4
5
comboBoxEdit1.SelectedIndexChanged += new System.EventHandler(
    this.comboBoxEdit1_SelectedIndexChanged);
//...
 private void comboBoxEdit1_SelectedIndexChanged(object sender, System.EventArgs e)
{ //действия }
Я понимаю, что SelectedIndexChanged имеет тип EventHandler который в свою очередь является delegate.
В
C#
1
+= new System.EventHandler(this.comboBoxEdit1_SelectedIndexChanged);
здесь мы указываем "поинтер" на функцию comboBoxEdit1_SelectedIndexChanged(). Так верно да? Но где инициализуруются параметры этой функции? Я ищу что то наподобии такого - SelectedIndexChanged(this, new EventArgs()); Они инициализируются автоматически во время runtime? И правильно ли я написал какие параметры должны передаваться. Надеюсь вы поняли о чем я. Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2012, 20:59
Ответы с готовыми решениями:

Обработка событий
Добрый день, прошу помочь в таком вопросе: у меня на форме компонент picturebox и несколько кнопок. Для picturebox описаны несколько...

Покадровая обработка событий
Как сделать по кадровую обработку событий? Button b = new Button(); b.Parent = this; ...

Обработка событий TextBox
Привет. Допустим у меня есть несколько TextBox'ов. Мне нужно проверить вводимые данные. Правила ввода одни и те же. Но для проверки мне...

8
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
26.11.2012, 21:09
зажигание события происходит в самом компоненте, бери декомпилятор в руки и потроши стандартные компоненты
0
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
26.11.2012, 21:17  [ТС]
никто не в курсе как выглядит вызов этой функции? Это все что мне интересно узнать.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
26.11.2012, 21:25
Цитата Сообщение от Rashmash Посмотреть сообщение
никто не в курсе как выглядит вызов этой функции? Это все что мне интересно узнать.
Попробуйте создать свое событие в своем классе и станет все понятно.
Внутри класса вызов события - тоже самое, что вызов обычного делегата.
C#
1
2
3
4
5
6
7
public event EventHandler MyEvent;
 
private OnMyEvent() {
   if (MyEvent != null) {
      MyEvent(this, new EventArgs()); //вызываем все обработчики нашего события
   }
}
1
 Аватар для negest
11 / 11 / 1
Регистрация: 31.03.2012
Сообщений: 29
26.11.2012, 21:28
Внутри она выглядит примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private static readonly object EVENT_SELECTEDINDEXCHANGED = new object();
 
public event EventHandler SelectedIndexChanged
{
    add
    {
        base.Events.AddHandler(ComboBox.EVENT_SELECTEDINDEXCHANGED, value);
    }
    remove
    {
        base.Events.RemoveHandler(ComboBox.EVENT_SELECTEDINDEXCHANGED, value);
    }
}
В свою очередь ComboBox наследуется от ListControl, который наследуется от Control, который неследуется от Component и множества интерфесов, причем кажется часть интерфесов организуют управление через нативный код.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
26.11.2012, 21:31
Цитата Сообщение от negest Посмотреть сообщение
Внутри она выглядит примерно так:
Кода вызова то нету(
0
 Аватар для negest
11 / 11 / 1
Регистрация: 31.03.2012
Сообщений: 29
26.11.2012, 21:48
Не совсем пойму что ты хочешь узнать, но смотри в ненаследуемый класс EventsHandlerList:

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
private sealed class ListEntry
{
    internal EventHandlerList.ListEntry next;
    internal object key;
    internal Delegate handler;
    public ListEntry(object key, Delegate handler, EventHandlerList.ListEntry next)
    {
        this.next = next;
        this.key = key;
        this.handler = handler;
    }
}
private EventHandlerList.ListEntry head;
 
public void AddHandler(object key, Delegate value)
{
    EventHandlerList.ListEntry listEntry = this.Find(key);
    if (listEntry != null)
    {
        listEntry.handler = Delegate.Combine(listEntry.handler, value);
        return;
    }
    this.head = new EventHandlerList.ListEntry(key, value, this.head);
}
он (EventsHandlerList) собственно и организует добаление событий в СписокСобытий, удаление из списка событий и поиск событий в этом списке.

если не ответил на твой вопрос, напиши так чтобы даже я понял, или как советовал товарищ выше в руки тебе декомпилятор может начать с ILSpy.
1
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
26.11.2012, 22:04  [ТС]
Просто я хочу знать как инициализируются параметры
C#
1
private void comboBoxEdit1_SelectedIndexChanged(object sender, System.EventArgs e)
C#
1
2
Их же инициализирует SelectedIndexChanged()?
 //То есть передает параметры для (object sender, System.EventArgs e).
Вот мне стало интересно где и как происходит этот вызов.
0
 Аватар для negest
11 / 11 / 1
Регистрация: 31.03.2012
Сообщений: 29
26.11.2012, 22:34
Так про объекты и события думаю в общих чертах понятно. Далее буду обяснять в теории так как вся эта система вероятно находся в нативном коде системы.

Окно программы, она же форма является объектом (имеет координаты позиции на экране) и может включать в себя другие объекты например ComboBox (который тоже имеет координаты позиции, но относительно формы). У программы есть цикл и таймер, который через определенное количество тиков (перод времени) проводит проверку состояния клавиатуры, мыши и других заранее предусмотренных устройств. Например считывает положение мыши относительно формы, проверяет пересекаются ли координаты указателя с положение объекта на форме, если таковое происходит, проверяет состояние кнопок мыши и если кнопка нажата то собственно и происходит запрос у объекта под указателем на проверку наличия обработчика события в списке событий объекта.
(object sender, EventsArg e) sender - это наш обект под указателем, e - событие, нажате кнопки мыши.
Объекты и события инициализируются как при запуске программы, так и во время выполнения.

Данный принцип используется при создании приложения с нуля без использований сторонних библиотек.
Примерно, как-то так.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2012, 22:34
Помогаю со студенческими работами здесь

Обработка событий мини-калькулятор
Здравствуйте! Как сделать, что бы когда ввожу два числа в два текст-бокса(для сложения) не выходило уведомление, о том, что я забыл ввести...

Обработка событий из .NET в JavaScript
Добрый день. Проблема вот в чем. Создал класс TestClass. using System; using System.Collections.Generic; using System.Text; ...

Обработка нескольких событий одной процедурой
Здравствуйте... Не могу понять тему, указанную в заголовке..Сейчас читаю Зиборова.. И там есть такой код: namespace...

Массовая обработка событий в нескольких TextBox
Создаю 10 текстовых полей и на каждое поле нужно навесить обработку события Validating. Можно на все поля навесить одну обаботку? ...

Обработка событий в элементе управления textbox
Здравствуйте, помогите пожалуйста(лучше кодом, или примером) по такому вопросу: имеется на форме textbox и кнопка, когда мы в textbox'e...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru