Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка событий динамически сгенерированных объектов.
 
 автор: EvgenLog   (27.02.2007 в 20:10)   письмо автору
 
 

Если можно, то пожалуйста на Visual C# пример.

Как отследить и обработать КЛИК на динамически созданном объекте (т.е. созданном програамно, а не с помощью дизайнера форм).

  Ответить  
 
 автор: cheops   (27.02.2007 в 20:23)   письмо автору
 
   для: EvgenLog   (27.02.2007 в 20:10)
 

В Windows API не имеет значения, как создан элемент управления динамически или статически - каждый из элементов управления имеет уникальный идентификатор, по которому можно отслеживать события в функции окна в switch-конструкции. В объектно-ориентированных библиотеках, например, VCL имя-функции обработчика можно назначать как обычное свойство. В MFC действует карта событий, которая начинается с BEGIN_MESSAGE_MAP и заканчивается END_MESSAGE_MAP(), например обработка события кнопки может выглядеть следующим образом
ON_BN_CLICKED(IDOK, OnBnClickedOk)

Где IDOK - идентификатор кнопки (целочисленная константа), а OnBnClickedOk - имя функции-обработчика.

  Ответить  
 
 автор: EvgenLog   (27.02.2007 в 20:29)   письмо автору
 
   для: cheops   (27.02.2007 в 20:23)
 

Хрошо, ясно. Но если создаётся несколько сотен объектов и каждому нужно привязать обработчика? Допустим и это удасться сделать например так это делает Visual Studio:


this.linkLabel58.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel58_LinkClicked);


Остаётся ещё одна проблема, как потом, это применить? Ведь имена переменных соданных в цикле только там и могут использоваться. Т.е. если я создам обработчик например для n-го элемента массива:


Label[Count].LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(Label[Count]_LinkClicked);


То не смогу его обработать ВНЕ цикла. А в цикле он не хочет ни как прописываться, говорит, что нельзя испльзовать VOID в этом месте. + ко всему вот это "Label[Count]_LinkClicked" тоже воспринимается с ошибкой, за чем-то требуется закрыть скобку, после "]".

И как быть?

  Ответить  
 
 автор: cheops   (28.02.2007 в 00:49)   письмо автору
 
   для: EvgenLog   (27.02.2007 в 20:29)
 

Для таких динамических элементов, обработчик, как правило, всегда один - он сам определяет от какого элемента идёт обращение.

  Ответить  
 
 автор: EvgenLog   (28.02.2007 в 11:41)   письмо автору
 
   для: cheops   (28.02.2007 в 00:49)
 

Хм. И например? Как к нему обратиться?

  Ответить  
 
 автор: cheops   (28.02.2007 в 12:51)   письмо автору
 
   для: EvgenLog   (28.02.2007 в 11:41)
 

Да, никак к нему обращаться не нужно, прикрепляете его при помощи метода LinkLabelLinkClickedEventHandler() как вы написали выше, а в самом обработчике проверяете какой из элементов вызвал его, ориентируясь на название или порядковый номер.

  Ответить  
 
 автор: EvgenLog   (28.02.2007 в 14:41)   письмо автору
 
   для: cheops   (28.02.2007 в 12:51)
 

Уважаемый Cheops, можно пример??? Я что-то ни как не пойму, что делать... (((

  Ответить  
 
 автор: cheops   (28.02.2007 в 22:27)   письмо автору
 
   для: EvgenLog   (28.02.2007 в 14:41)
 

С C# не помогу (только если вы выложите приложение и я его попытаюсь модифицировать) - не касался его. У вас приложение большое?

  Ответить  
 
 автор: EvgenLog   (01.03.2007 в 14:28)   письмо автору
 
   для: cheops   (28.02.2007 в 22:27)
 

Достаточно... Если только участок кода... Подойдёт?

  Ответить  
 
 автор: cheops   (01.03.2007 в 16:57)   письмо автору
 
   для: EvgenLog   (01.03.2007 в 14:28)
 

Да, мне нужен участок, чтобы можно было воспроизвести ситуацию.

  Ответить  
 
 автор: EvgenLog   (01.03.2007 в 19:27)   письмо автору
1.7 Кб
 
   для: cheops   (01.03.2007 в 16:57)
 

Вот отрезок кода. Там функция, которая выводит всё это дело на форму.

  Ответить  
 
 автор: EvgenLog   (03.03.2007 в 09:25)   письмо автору
 
   для: cheops   (01.03.2007 в 16:57)
 

Ну вот приврепил я участок кода... И ответа нет.

  Ответить  
 
 автор: cheops   (03.03.2007 в 13:28)   письмо автору
 
   для: EvgenLog   (03.03.2007 в 09:25)
 

Руки пока не доходят.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования