![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Stolzen |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: нет Всего: 48 |
Доброе время суток!
Столкнулся со следующей проблемой: Есть объект TreeView, который, как известно, содержит в себе коллекцию Nodes. Объекты Node там очень разные, и при клике на них должны вести себя по-разному. Самое логичное решение, пришедшее мне в голову - создать производные от класса TreeNode и объявить в них событие Click (в моем случае это DoubleClick). Вот один из примеров:
Естественно, ничего не работает. Ни окошка с "тест1", ни окошка с "тест2" я так и не увидел. В Делфи я бы стал отлавливать сообщения Windows, которые бы мне говорили, что по объекту был сделан дабл-клик. Поиск в гугле с запросом "обработка классами сообщений системы" и кучей различных его вариаций ничего не дал. Может, кто-нибудь что-то посоветует? Да и вообще, было бы интересно узнать, как цеплять обработчики событий системы к классам, которые не являются потомками Control. |
||||||
|
|||||||
CYBERDREAM |
|
||||||
![]() I think, there4 I am ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 11 Всего: 28 |
Привет Stolzen, Как по мне, то лучше сделать следующим образом.
Как ты сказал, у тебя в узлах разные данные хранятся, вот как пример
В своей форме при добавлении закидывай в тэги объекты
а обработчик уже выглядит так
Думаю так по красивее будет, и легче -------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
||||||
|
|||||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: нет Всего: 48 |
Спасибо CYBERDREAM!
Я уже что-то подобное наваял
Хотя ваше решение элегантнее, но, в принципе, суть та же - используется обработчик событий компонента treeView1. Может всё-же есть возможность ноду быть независимым от TreeView и самому реагировать на события? |
|||
|
||||
CYBERDREAM |
|
|||
![]() I think, there4 I am ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 11 Всего: 28 |
А как ты отследишь дабл клик по узлу? никак, так что выйдет.
Думаю логичнее будет мой споосб использовать -------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Узел не явяется контролом, так что, независимо от того, что использовать, встроенные механизмы или делать через жо винапи - это всё-равно можно реализовать только через тривью. Фактически узлы просто содержат информацию о том, как дерево должно себя прорисовывать. Но реализовать клики в самих узлах можно. Для этого надо создать производный от TreeNode класс и отслеживать в нём нужное тебе событие дерева. Тут правда есть нюанс: узел как объект может существовать и вне дерева, поэтому инициировать отслеживание событий дерева придётся после того, как узел будет в это дерево добавлен, вручную. Короче гемор тот ещё. В общем если очень сильно надо, то набросок кода привожу
![]() Это сообщение отредактировал(а) diadiavova - 23.5.2010, 10:05 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: нет Всего: 48 |
Да, так и получается, что никак не выходит отследить событие самим узлом. Хотя наверняка способ есть - но я так и не смог научится ставить хуки своим классам для отлова событий Windows. Да и не .NET это уже получается ![]() Спасибо, diadiavova! Думаю, я оставлю у себя вариант, предложенный CYBERDREAM, но и ваш пример мне тоже пригодится. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
А почему надо отслеживать событие самим узлом? Это ведь неудобно. Стандартный способ ведь очень удобен. В обработчике события NodeMouseDoubleClick самого дерева просто надо проверять по какому узлу кликнули, этот узел будет возвращён свойством Node второго аргумента обработчика. Зачем все эти пляски с бубнами? ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
CYBERDREAM |
|
|||
![]() I think, there4 I am ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 11 Всего: 28 |
иногда программисту это надо (отвести душу так сказать) ![]() -------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну разве что...
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: нет Всего: 48 |
Не всегда решения, приходящие мне в голову, являются логичными. И порой они труднореализуемы
![]() Это сообщение отредактировал(а) Stolzen - 24.5.2010, 23:20 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |