| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Обработчик событий системы в своём классе |
| Автор: Stolzen 22.5.2010, 01:03 | ||||||
| Доброе время суток! Столкнулся со следующей проблемой: Есть объект TreeView, который, как известно, содержит в себе коллекцию Nodes. Объекты Node там очень разные, и при клике на них должны вести себя по-разному. Самое логичное решение, пришедшее мне в голову - создать производные от класса TreeNode и объявить в них событие Click (в моем случае это DoubleClick). Вот один из примеров:
Естественно, ничего не работает. Ни окошка с "тест1", ни окошка с "тест2" я так и не увидел. В Делфи я бы стал отлавливать сообщения Windows, которые бы мне говорили, что по объекту был сделан дабл-клик. Поиск в гугле с запросом "обработка классами сообщений системы" и кучей различных его вариаций ничего не дал. Может, кто-нибудь что-то посоветует? Да и вообще, было бы интересно узнать, как цеплять обработчики событий системы к классам, которые не являются потомками Control. |
| Автор: CYBERDREAM 22.5.2010, 12:49 | ||||||
| Привет Stolzen, Как по мне, то лучше сделать следующим образом. Как ты сказал, у тебя в узлах разные данные хранятся, вот как пример
В своей форме при добавлении закидывай в тэги объекты
а обработчик уже выглядит так
Думаю так по красивее будет, и легче |
| Автор: Stolzen 23.5.2010, 00:19 | ||
| Спасибо CYBERDREAM! Я уже что-то подобное наваял
Хотя ваше решение элегантнее, но, в принципе, суть та же - используется обработчик событий компонента treeView1. Может всё-же есть возможность ноду быть независимым от TreeView и самому реагировать на события? |
| Автор: CYBERDREAM 23.5.2010, 08:02 |
| А как ты отследишь дабл клик по узлу? никак, так что выйдет. Думаю логичнее будет мой споосб использовать |
| Автор: Stolzen 23.5.2010, 23:03 |
Да, так и получается, что никак не выходит отследить событие самим узлом. Хотя наверняка способ есть - но я так и не смог научится ставить хуки своим классам для отлова событий Windows. Да и не .NET это уже получается Спасибо, diadiavova! Думаю, я оставлю у себя вариант, предложенный CYBERDREAM, но и ваш пример мне тоже пригодится. |
| Автор: diadiavova 24.5.2010, 10:41 | ||
А почему надо отслеживать событие самим узлом? Это ведь неудобно. Стандартный способ ведь очень удобен. В обработчике события NodeMouseDoubleClick самого дерева просто надо проверять по какому узлу кликнули, этот узел будет возвращён свойством Node второго аргумента обработчика. Зачем все эти пляски с бубнами? |
| Автор: CYBERDREAM 24.5.2010, 11:51 | ||
иногда программисту это надо (отвести душу так сказать) |
| Автор: diadiavova 24.5.2010, 11:58 |
| Ну разве что... |
| Автор: Stolzen 24.5.2010, 23:19 |
| Не всегда решения, приходящие мне в голову, являются логичными. И порой они труднореализуемы |