|
Модераторы: gambit, Partizan |
|
маерсон |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Есть Node1(содержит в себе Child1, Child2, Child3) и Node2(содержит в себе Child4, Child5, Child6). Отрисовываются вручную в OwnerDrawAll. Программа по задумке периодически из Node2 удаляет один из Child'ов и сразу добавляет в Node1, таким образом перемещение чаилдов. Но когда происходит удаление и добавление(оба родительских нода развернуты всегда), TreeView дергается-мерцает.
Пробовал перед удалением делать
и
после удаления нода - все равно мигает. Пробовал также и так:
Все равно дергается. Как бороться? Это сообщение отредактировал(а) маерсон - 12.2.2009, 16:28 |
||||||
|
|||||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
маерсон, что значит дёргается? родительский узел сворачивается/разворачивается?
-------------------- СУВ, Partizan. |
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
не совсем так: мерцание дерева и при сворачивании\разворачивании наблюдается. Также мерцает при ресайзе.
Это сообщение отредактировал(а) маерсон - 12.2.2009, 16:25 |
|||
|
||||
unicuum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
Если child это нод, и принадлежит TreeView, попробуй так.
-------------------- обычный день на винграде |
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
unicuum, тоже пробовал - моргает все равно при отрисовке.
Читал про свойство DoubleBuffer, возможно сумеет убрать моргание...но до него добраться можно, если наследовать от TreeView...правда не смог нормально реализовать и отобразить данные в дереве(вернее данные вообще перестали отображаться), хотя просто делал так:
Это сообщение отредактировал(а) маерсон - 13.2.2009, 08:00 |
|||
|
||||
TIGERоX |
|
|||
начинающий... Профиль Группа: Участник Сообщений: 59 Регистрация: 7.9.2005 Репутация: нет Всего: 1 |
this.SetStyle(ControlStyles.DoubleBuffer, true);
хватит этого, остальные флаги говорят о том что пользователь на себя берет отрисовку контрола |
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
TIGERоX, уже испробывал - все равно моргает!
|
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Раз уж никто не сталкивался с такой аномалией, может посоветуете достойную аналогию TreeView?
|
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
Если отрисовываешь вручную - и рисуешь дерево целиком, переопредели OnPaintBackground и ничего в нём не делай (не вызывай базовый обработчик).
|
|||
|
||||
TIGERоX |
|
|||
начинающий... Профиль Группа: Участник Сообщений: 59 Регистрация: 7.9.2005 Репутация: нет Всего: 1 |
покажите пожалуйста весь код
|
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
А как тогда background image отрисовать? Это сообщение отредактировал(а) маерсон - 14.2.2009, 11:43 |
|||
|
||||
unicuum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
Значит ты не правильно перерисовываешь экран.
Лучше прочитай по этой теме какие-нибудь книжки, навроде "Коннелл Джон - Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET" и прочее. Как правильно перерисовывать естественно без моргания ещё написано в MSDN. -------------------- обычный день на винграде |
|||
|
||||
маерсон |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
unicuum, спасибо, в мсдн почитал. Теперь отрисовывается вручную все в собтии OnPaint. Каждый Node рисую если он видим, но как быть с фоном?
Предполагаю, что вот так:
Верно ли писать в OnPaint myTreeView1.Invalidate() ? И что лучше использовать g.DrawImageUnscaled(img, g.VisibleClipBounds) или g.DrawImageUnscaled(img, ClientRectangle) ? Как можно отрисовать тогда фон, если он стирается и видно как он перерисовывается? Это сообщение отредактировал(а) маерсон - 15.2.2009, 17:00 |
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
Нет, конечно - в OnPaint-е этого нельзя писать. Для фона переопределяй метод OnPaintBackground, как я уже писал. Само собой лучше перерисовать только видимую часть. |
|||
|
||||
unicuum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
Попробовал тут реализовать этот функционал. В общем, тут надо разбираться в виндовых событиях, а я не разбираюсь.
Надо что-то делать с событием сворачивания и разворачивания. Может заменить их на "после сворачивания и разворачивания". Тут дело даже не в том, что нельзя сделать нормально, просто надо тратить на это время, а майкрософт потом возьмёт и всё изменит и вообще сделает всё несовместимым. См. прикреплённый пример. Это сообщение отредактировал(а) unicuum - 27.3.2009, 17:44 Присоединённый файл ( Кол-во скачиваний: 15 ) TreeViewImage.rar 326,95 Kb -------------------- обычный день на винграде |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |