![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Corey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Здравствуйте.
Подскажите, пожалуйста! Имеется дерево, нужно, чтобы при выставлении флага в дочернем узле автоматически выделялись все его родительские узлы. И здесь проблема, у меня реализовано, чтобы при выделении флагом родительского узла, автоматически выделялись и дочернии. Т.е. происходит как бы обратная реакция. Как это можно разрешить? |
|||
|
||||
Суровый |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.4.2009 Репутация: 1 Всего: 2 |
Corey,
Самое простое решение - не форсированно выставлять флаги, а сделать проверку выставлены ли они или нет. Если не выставлены - выставить, а если выставлены - ничего не делать, что прекратит запуск обработчиков. |
|||
|
||||
Corey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Спасибо за ответ.
Но если, допустим, флаги не выставлены и выставляются в соответствии с алгоритмом выставления флагов на родительских узлах. То здесь как раз и срабатывает опять событие AfterCheck с выставленем флагов дочерних, которых совсем не нужно помечать. |
|||
|
||||
Суровый |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.4.2009 Репутация: 1 Всего: 2 |
Corey,
Вы не совсем поняли) Проверку нужно сделать в обоих обработчиках. |
|||
|
||||
Corey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Но как тогда поставить условие, что выставление флага идет родительского узла (чтоб не помечать его потомков), а не текущего (в этом случае помечаются флагами дочерние). Отписка от событий не помогает, точнее, отписаться получается для пометки родительского, но возобновить подписку не удается
|
|||
|
||||
Суровый |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.4.2009 Репутация: 1 Всего: 2 |
Возможно не очень красивое решение, но больше ничего в голову не лезет.
Обрабатываем событие "клик по ноде"
Переменная wasChanged показывает, привел ли клик по ноде к изменению состояния чекбокса. Это выполняется следующим кодом:
Функции checkChilds и checkParents работают рекурсивно:
Вот такие пироги. Прошу сильно не бить ![]() |
||||||
|
|||||||
Corey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Спасибо большое за помощь
![]() ![]() |
|||
|
||||
Corey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Да, все получилось, еще раз спасибо!
Это сообщение отредактировал(а) Corey - 26.7.2011, 15:33 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |