1 | ||||||
Обработчик событий12.03.2013, 10:02. Показов 2235. Ответов 16
Метки нет (Все метки)
Есть панель с контролами, каждый контрол имеет свой номер. Есть рандомное число (int temp).
Не могу разобраться с обработчиком. Нужно чтобы по нажатию на контрол имеющий номер рандомного числа выполнялись некоторые действия. Использую конструкцию:
1
|
12.03.2013, 10:02 | |
Ответы с готовыми решениями:
16
Обработчик событий Передача параметров в обработчик событий Один обработчик событий для нескольких объектов Можно ли в обработчик событий передать свою переменную |
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
12.03.2013, 11:19 | 2 |
Для начала я бы посмотрел, в какой строке вылетает NullReferenceException.
0
|
12.03.2013, 11:30 | 3 |
Это ты подписываешься на событие, это нужно сделать 1 раз для всех контролов и можно подписаться на один обработчик, а не на кол-во обработчиков равное кол-ву контролов.
Добавлено через 48 секунд Вообще скинь проект, быстрее будет. С нуля неохота делать.
0
|
12.03.2013, 11:45 | 5 | |||||
Судя по коду, он подписывается на событие не один раз. Короче, без проекта можно ещё на пару страниц гадать. Или кода бы больше выложил, не понятно в каком месте эта строка вообще используется.
0
|
12.03.2013, 12:16 [ТС] | 6 | ||||||||||
Эксепшн ссылается на эту строку.
lst - это список. Я прохожу по панельке циклом foreach и заношу все контролы в него. За границы точно не выходит.
Добавлено через 11 минут Строку
1
|
12.03.2013, 12:55 [ТС] | 8 |
Аттачед.
... и небольшое пожелание если можно. Можно с комментариями или просто примерно объяснить что где не так и как реализовать? Просто если юзать готовый чужой код, далеко так не уйдешь.
1
|
12.03.2013, 13:10 | 9 | |||||
Понятно всё. Проект явно не ты делал, правильно я понимаю? Ща должно заработать.
Вот эту строку ты вообще запихал не пойми куда и не пойми зачем. Впечатление, что ты вообще ничего не понимаешь .
Ща скину вариант рабочий, только картинки сам сделаешь, я тупо буду фон менять у кнопки. Добавлено через 6 минут И тебе принципиально нужен поток? Может на таймер проще переделать?
0
|
12.03.2013, 13:25 [ТС] | 10 |
Если это комплимент, то комплимент засчитан)) Я новичек и у меня пока не совсем лады с делегатами/событиями.
Приложение мое, все события я генерирую двойным нажатием по контролу, а это не мог сгенерировать, поэтому написал его сам глядя на другие события и засунул его просто где находятся другие, и самое главное что работало, только не совсем как надо. Вообщем, мне бы конечно лучше разъяснить где подправить, чем выкладывать новый проект, я их делаю для себя для практики, а не для коллекционирования.
1
|
12.03.2013, 13:25 | 11 | |||||
Короче, как-то так:
1
|
12.03.2013, 16:04 [ТС] | 13 |
Спасибо! Прям то что нужно! Ничего там комментировать не нужно, и так все понятно. Я знал, что нужно invoke использовать, но не знал как. Тяжело мне пока делегаты даются. Вообщем, спасибо!
Добавлено через 1 час 1 минуту Проанализировал код внимательно. Вся моя ошибка была только в использовании ключевого слова this в подписке на событие, и изначально я ее правильно разметил, пока в соседней теме, один гений мне не подсказал ее вынести.
0
|
12.03.2013, 16:10 | 14 |
После того как с кнопки пропадает картинка (или цвет меняется на стандартный) нужно отписываться от обработчика события, иначе при следующем нажатии на неё всё равно засчитается попадание по картинке, а когда эта кнопка снова получит картинку, то она подпишется ещё раз на тот же обработчик и уже нажатие на кнопке 2 раза вызовет обработчик и засчитает 2 очка. Это если оставить так, как было до моего редактирования (закоментирована строка была).
Добавлено через 1 минуту Это вообще надо вынести туда где инициализируется поток, а не вызывать вместе с _thread.Start(); Добавлено через 1 минуту Мне почему-то кажется, что здесь разумнее таймер использовать.
1
|
12.03.2013, 17:08 [ТС] | 15 |
Спасибо за замечания, все поправил. С таймером никогда не работал, и пока не представляю, что это. Сейчас погуглю. Есть одна проблемка, если успеваешь кликнуть несколько раз на картинке, то счетчик увеличится не на один раз, а на кол-во кликов.
0
|
12.03.2013, 17:34 | 16 | |||||
Конкретно в этом названии метода вообще не вижу причин для таких сокращений: LstTempClick, не лучше ли ListTempClick (если я правильно понял сокращённое слово). И вообще все эти: r, t1 режут глаз.
1
|
12.03.2013, 18:05 [ТС] | 17 |
Класс! Спасибо! По поводу сокращений, я учился по видеокурсу Гудка, а он все названия сокращает: list = lst, button = btn, control = ctrl и т.д. Ну я и подумал, что так принято в среде программирования, как например интерфейсы начинать с буквы I.
0
|
12.03.2013, 18:05 | |
12.03.2013, 18:05 | |
Помогаю со студенческими работами здесь
17
Можно ли как-нибудь обработчик событий сделать через цикл ? Как передать массив объектов как параметр в обработчик событий Реализовать хранилище событий, для хранения событий в БД Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |