Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: События и самодельные контролы!  (Прочитано 12697 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« : 08-01-2012 19:33 » 

Уважаемые программисты, помогите мне разобраться! Не понял
В общем такое дело: я перешарил приличное количество литературы в инете, по созданию пользовательских элементов управления.
В результате мне удалось создать несколько графических штучек... Но возникла такая проблема - не понемаю как для них создать собственные события!

Я знаю приблезительно что такое дилегаты - вроде ведь с их помощью создаются события? но с ними я не имел пока-что дела.
На пример, есть у меня простой контрол, типа переключателя - как сдвоенная кнопка. Для нее мне надо сделать 2 события: при нажатии на ее левую половину, и при нажатии на правую половину (LeftButton_Click, RightButton_Click) - то есть при добавлении данного контрола на форму, появились 2 данных новых события. И при этом как отключить стандартные события (Click...)?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-01-2012 20:51 » 

MasterMan342, а зачем отключать стандартные? Просто не пользуйся ими.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 08-01-2012 21:41 » 

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

Не будите спашяго дракона.
             Джаффар (Коша)
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 09-01-2012 08:56 » 

Уважаемые программисты, помогите мне разобраться! Не понял
В общем такое дело: я перешарил приличное количество литературы в инете, по созданию пользовательских элементов управления.
В результате мне удалось создать несколько графических штучек... Но возникла такая проблема - не понемаю как для них создать собственные события!

Я знаю приблезительно что такое дилегаты - вроде ведь с их помощью создаются события? но с ними я не имел пока-что дела.
На пример, есть у меня простой контрол, типа переключателя - как сдвоенная кнопка. Для нее мне надо сделать 2 события: при нажатии на ее левую половину, и при нажатии на правую половину (LeftButton_Click, RightButton_Click) - то есть при добавлении данного контрола на форму, появились 2 данных новых события. И при этом как отключить стандартные события (Click...)?

Прошу прощения за неточность! Я работаю на Visual Studio 2010 на C#

Добавлено через 4 минуты и 23 секунды:
MasterMan342, а зачем отключать стандартные? Просто не пользуйся ими.

Дело в том, что я буду отдавать эти контрлы другим разработчикам, и лишние события ну... будут попросту мешаться))
кому надо под рукой иметь 10 событий с одним и тем-же названием? (ButtonClick, LeftButton_Click, Click1, Click2...)

Просто интересно, нельзя ли попросту делая свой контрол, оставить исобственные события? ну или как на крайняк запретить пользоваться некоторыми стандартными?
« Последнее редактирование: 09-01-2012 09:00 от MasterMan342 » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 09-01-2012 09:49 » 

MasterMan342, интересный подход. Те, если у тебя не хватает фантазии, как могут быть использованы другие события, то значит они "мешают"?
На основании чего ты хочешь ограничить возможности использования твоих контролов? Почему ты не допускаешь мысль, что кому-нить из разработчиков понадобится именно одно из "мешающих", по твоему мнению, событий?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-01-2012 10:09 » 

MasterMan342, интересный подход. Те, если у тебя не хватает фантазии, как могут быть использованы другие события, то значит они "мешают"?
На основании чего ты хочешь ограничить возможности использования твоих контролов? Почему ты не допускаешь мысль, что кому-нить из разработчиков понадобится именно одно из "мешающих", по твоему мнению, событий?
Дело в том, что некоторые стандартные события могут быть не только бесполезны, но и вредны... ну или просто безсмысленны...
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 09-01-2012 11:27 » 

Цитата
Дело в том, что некоторые стандартные события могут быть не только бесполезны, но и вредны... ну или просто безсмысленны...
Если звезды зажигают, то это кому-то нужно.(с)

Насчет бессмысленности и бесполезности - пустой разговор.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 09-01-2012 15:15 » 

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

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 09-01-2012 17:08 » 

Это всё лирика. Я главного не понял, что нужно-то? Добавить события или убрать события? И если добавить, то куда? Просто в код для ручного программирования, или так, чтобы они появлялись в окне Properties редактора форм?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 10-01-2012 09:36 » 

Это всё лирика. Я главного не понял, что нужно-то? Добавить события или убрать события? И если добавить, то куда? Просто в код для ручного программирования, или так, чтобы они появлялись в окне Properties редактора форм?

Да, собственно мне нужно создать события и добавить их в свойства редактора форм (вкладка события). Но я не знаю пока как вообще создавать события. Покажите на каком-нить легоньком примере.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 10-01-2012 17:20 » new

MasterMan342, для вопросов вида "как использовать фичу языка" существует MSDN - там подробно описывается, и с примерами. Нужно лишь знать, как фича называется на английском, чтобы задать поиск.

Вот тут пример, как описывается событие.
http://msdn.microsoft.com/en-us/library/8627sbea%28v=VS.80%29.aspx

Нужно иметь делегат - это тип, аналогичный указателю на функцию в C/C++, но более хитрый, поскольку работает с объектами. Стандартный делегат называется EventHandler. У него 2 параметра: sender типа object (указатель на объект, который сгенерировал событие) и структура типа EventArgs. Если вместе с событием нужно передать какую-то дополнительную информацию (например, у мыши - координаты и т.п.), то делается собственная структура - потомок от EventArgs, в которой вставляются нужные поля-параметры. Её можно будет передавать через EventHandler.

Затем нужно иметь событие типа делегата. Допустим, ты называешь событие Selected.

В-третьих, нужно иметь метод объекта, который генерирует событие. По соглашению такие методы начинаются с On... после чего идёт имя события. Т.е. OnSelected. Когда внутри кода твоего контрола принимается решение, что событие произошло - в этом месте надо вызвать такой метод. Внутри метода пишется стандартный код посылки сообщения всем подписавшимся на событие. При необходимости делаются подготовительные действия (например, заполнить поля-параметры в твоей EventArgs).

Что касается появления события в свойствах редактора форм, то первый вопрос - какие формы. Windows Forms или WPF? В общем случае этот эффект достигается при помощи пометки события специальным атрибутом (пишется в квадратных скобках над помечаемым элементом кода).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines