Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для MasMaX
8 / 8 / 2
Регистрация: 07.02.2012
Сообщений: 71

Передача аргументов обработчику события

17.07.2013, 13:29. Показов 2489. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеет массив экземпляров класса:
C#
1
private List<Video> myvideo = new List<Video>();
У данного класса есть событие "Ending", которое срабатывает в конце проигрывания видео. При заполнении списка экземпляров я добавляю обработчик события каждому экземпляру:

C#
1
myvideo[xxx].Ending += new EventHandler(myvideo_Ending)
И соответственно создал функцию для обработки события:
C#
1
2
3
4
5
6
protected void myvideo_Ending(object sender, EventArgs e)
{
    // Здесь я сделаю что-то 
    // Сам блок запускается нормально
    myvideo[xxx].name = "тра ля ля"; // откуда вот в этом обработчике взять xxx и понять кто его вызвал?
}
А как теперь передать в обработчик событий индекс вызвавшего его экземпляра? В данном примере - xxx.
Просто добавление новых аргументов в функцию myvideo_Ending не помогает. Прога требует "object sender, EventArgs e".

Добавлено через 6 минут
ой. Извините. оказалось всё просто.

надо писать
C#
1
myvideo[(sender as Video)].name = "тра ля ля";
И тогда всё работает.

Добавлено через 3 минуты
Хотя всё равно порядковый номер экземпляра неплохо бы получить...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2013, 13:29
Ответы с готовыми решениями:

Передача аргумента обработчику события
Нашел подходящий для меня код, но в строке 14 выдает: &quot;System.Net.DownloadDataCompletedEventArgs&quot; не содержит определение для...

Передача параметров обработчику событий
при запуске программы создаётся массив пикчербоксов и заполняется свойствами. там же создаётся обработчик событий для каждого пикчербокса,...

Передача аргументов в событиях
Здравствуйте. Помогите разложить знания по полочкам. Хочу понять алгоритм передачи аргументов в событиях, а также прошу совета, как...

9
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
17.07.2013, 13:41
написать свой класс,наследуемый от EventArgs,и собственно,использовать его вместо базового EventArgs
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
17.07.2013, 13:56
sniper_lunev, для справки, не придется ли тогда наследовать и класс видео чтобы в запуск события передать новый объект EventArgs?
0
 Аватар для MasMaX
8 / 8 / 2
Регистрация: 07.02.2012
Сообщений: 71
17.07.2013, 13:56  [ТС]
Цитата Сообщение от sniper_lunev Посмотреть сообщение
написать свой класс,наследуемый от EventArgs,и собственно,использовать его вместо базового EventArgs
Попробовал сделать вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class VideoEventArgs : EventArgs
        {
            public int cur_layer { get; set; }
            public int cur_index { get; set; }
        }
....
 
protected void myvideo_Ending(object sender, VideoEventArgs e)
{
      label4.text = e.cur_layer;
}
 
....
 
arg.cur_layer = layer;
arg.cur_index = 2;
 
myvideo[layer] = new Video(filename);
myvideo[layer].Ending += new EventHandler(myvideo_Ending(myvideo[layer], arg));
Выдает ошибку "Требуется имя метода" на последней строчке.

Что я делаю не так?
0
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
17.07.2013, 14:03
Kruds, эммм.нет.

Добавлено через 37 секунд
MasMaX, надо еще и основной класс видео править

Почитайте.
0
 Аватар для MasMaX
8 / 8 / 2
Регистрация: 07.02.2012
Сообщений: 71
17.07.2013, 14:10  [ТС]
Цитата Сообщение от sniper_lunev Посмотреть сообщение
MasMaX, надо еще и основной класс видео править

Почитайте.
спасибо, почитаю сейчас.

Класс Video не могу поправить. Это из коллекции Microsoft.DirectX.AudioVideoPlayback. Разве что создать класс-наследник Video с измененным обработчиком.
0
101 / 101 / 15
Регистрация: 23.05.2012
Сообщений: 260
17.07.2013, 14:21
А что все так сложно...
Не sender ли знает кто событие породил?

И что-то похожее на
C#
1
int index = myvideo.IndexOf((Video)sender);
таки должно сказать под каким номером живет "посылальщик" события в list'е

Или без порождения делегатов и правки всего что можно тут никак не обойтись?
1
 Аватар для MasMaX
8 / 8 / 2
Регистрация: 07.02.2012
Сообщений: 71
17.07.2013, 14:38  [ТС]
Класс наследник от Video сделать не дает. Ошибка "frm_main.Video2": нельзя наследовать от запечатанного типа "Microsoft.DirectX.AudioVideoPlayback.Vi deo".

Цитата Сообщение от DPW Посмотреть сообщение
А что все так сложно...
Не sender ли знает кто событие породил?
В sender лежит ссылка на конкретный экземпляр класса Video. Соответственно я с ним могу делать что угодно. Но мне ещё надо узнать его порядковый номер в массиве экземпляров "List<Video> myvideo = new List<Video>()". И каждый конкретный экземпляр класса не знает свой порядковый номер в общем списке...

Вообщем чтобы понятнее было суть программы в том, что видео играется по плейлисту. И выводится в несколько слоев, т.е. "картинка в картинке". Соответственно у каждой картинки свой плейлист. Программе надо знать из какого плейлиста надо брать следующее видео. А для этого ей надо знать в каком плейлисте она сейчас находится. С одним плейлистом проблем нет... Видимо придется отказаться от затеи когда два плейлиста сразу играют. Один плейлист, а второе просто одиночное видео сделать..

Добавлено через 2 минуты
Цитата Сообщение от DPW Посмотреть сообщение
И что-то похожее на
C#
1
int index = myvideo.IndexOf((Video)sender);
таки должно сказать под каким номером живет "посылальщик" события в list'е
Хм. Похоже на истину, сейчас проверю!
0
101 / 101 / 15
Регистрация: 23.05.2012
Сообщений: 260
17.07.2013, 14:45
А это
C#
1
int index = myvideo.IndexOf((Video)sender);
не то?
или списков как грязи?

Добавлено через 6 минут
Да и кстати а зачем?
C#
1
 myvideo[xxx].name=
или
C#
1
myvideo[(sender as Video)].name
когда
C#
1
(Sender as Video).name=
логичней

Ладно, к сути а сколько у тебя этих List'ов?
0
 Аватар для MasMaX
8 / 8 / 2
Регистрация: 07.02.2012
Сообщений: 71
17.07.2013, 14:50  [ТС]
Цитата Сообщение от DPW Посмотреть сообщение
А это
C#
1
int index = myvideo.IndexOf((Video)sender);
не то?
или списков как грязи?
Точно оно!! Спасибо.

Добавлено через 4 минуты
Цитата Сообщение от DPW Посмотреть сообщение
Да и кстати а зачем?
C#
1
 myvideo[xxx].name=
или
C#
1
myvideo[(sender as Video)].name
когда
C#
1
(Sender as Video).name=
логичней

Ладно, к сути а сколько у тебя этих List'ов?
Ну да. "(Sender as Video).name" так верно. Я в проге так и написал, сюда не верно скопировал.

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

Цепочка вызовов и передача аргументов
Если делегат ссылается на цепочку методов (в примере ниже на методы one и two), то всем методам передается начальное значение аргумента?...

Передача аргументов запущенному приложению
Возможно ли передать аргументы уже запущенному приложению? Заранее благодарю за ответы. :)

Передача аргументов командной строки
Смысл в том, что бы реализовать switch по количеству аргументов командной строки, выполняя при этом каждый аргумент в case'е. У самого не...

Передача аргументов командной строке
Есть кусок кода из книги Шилдта: using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

List<Task> передача аргументов
Привет! Имею проблему с передачей аргументов в метод thr public List&lt;info&gt; infos = new List&lt;info&gt;(); public...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru