|
|
|
| Если можно, то пожалуйста на Visual C# пример.
Как отследить и обработать КЛИК на динамически созданном объекте (т.е. созданном програамно, а не с помощью дизайнера форм). | |
|
|
|
|
|
|
|
для: EvgenLog
(27.02.2007 в 20:10)
| | В Windows API не имеет значения, как создан элемент управления динамически или статически - каждый из элементов управления имеет уникальный идентификатор, по которому можно отслеживать события в функции окна в switch-конструкции. В объектно-ориентированных библиотеках, например, VCL имя-функции обработчика можно назначать как обычное свойство. В MFC действует карта событий, которая начинается с BEGIN_MESSAGE_MAP и заканчивается END_MESSAGE_MAP(), например обработка события кнопки может выглядеть следующим образом
ON_BN_CLICKED(IDOK, OnBnClickedOk) |
Где IDOK - идентификатор кнопки (целочисленная константа), а OnBnClickedOk - имя функции-обработчика. | |
|
|
|
|
|
|
|
для: 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" тоже воспринимается с ошибкой, за чем-то требуется закрыть скобку, после "]".
И как быть? | |
|
|
|
|
|
|
|
для: EvgenLog
(27.02.2007 в 20:29)
| | Для таких динамических элементов, обработчик, как правило, всегда один - он сам определяет от какого элемента идёт обращение. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2007 в 00:49)
| | Хм. И например? Как к нему обратиться? | |
|
|
|
|
|
|
|
для: EvgenLog
(28.02.2007 в 11:41)
| | Да, никак к нему обращаться не нужно, прикрепляете его при помощи метода LinkLabelLinkClickedEventHandler() как вы написали выше, а в самом обработчике проверяете какой из элементов вызвал его, ориентируясь на название или порядковый номер. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2007 в 12:51)
| | Уважаемый Cheops, можно пример??? Я что-то ни как не пойму, что делать... ((( | |
|
|
|
|
|
|
|
для: EvgenLog
(28.02.2007 в 14:41)
| | С C# не помогу (только если вы выложите приложение и я его попытаюсь модифицировать) - не касался его. У вас приложение большое? | |
|
|
|
|
|
|
|
для: cheops
(28.02.2007 в 22:27)
| | Достаточно... Если только участок кода... Подойдёт? | |
|
|
|
|
|
|
|
для: EvgenLog
(01.03.2007 в 14:28)
| | Да, мне нужен участок, чтобы можно было воспроизвести ситуацию. | |
|
|
|
|
 1.7 Кб |
|
|
для: cheops
(01.03.2007 в 16:57)
| | Вот отрезок кода. Там функция, которая выводит всё это дело на форму. | |
|
|
|
|
|
|
|
для: cheops
(01.03.2007 в 16:57)
| | Ну вот приврепил я участок кода... И ответа нет. | |
|
|
|
|
|
|
|
для: EvgenLog
(03.03.2007 в 09:25)
| | Руки пока не доходят. | |
|
|
|