powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Быстро очистить Treeview
18 сообщений из 18, страница 1 из 1
Быстро очистить Treeview
    #38989351
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как быстро очистить Treeview?

.Nodes.Clear тормозит сильно при большом количестве нодов.

Спасибо.
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989366
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спрятать, очистить, показать.
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989369
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тормозит визуально что-ли?
там какое-то свойство нужно поменять, типа автоэкспанда.

У меня несколько тысяч нод очищались мгновенно
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989395
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyспрятать, очистить, показать.
оно
Shocker.Proтам какое-то свойство нужно поменять, типа автоэкспанда.
нет такого свойства вроде как

Спасибо
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989399
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот, нашел, что я делаю

Код: vbnet
1.
2.
3.
ls.SingleSel = False
ls.Nodes.Clear
ls.SingleSel = True
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989404
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proвот, нашел, что я делаю[/src]
SingleSel не использую, да и не влияет он особо на очистку)
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989407
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит что-то у меня до кучи по умолчанию стоит подходящее. Я помню, что я эту проблему поборол без использования скрытия...
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989416
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
квик TreeviewПодскажите как быстро очистить Treeview?

.Nodes.Clear тормозит сильно при большом количестве нодов.

Спасибо.

Видимо после Nodes.Clear вызывать DoEvents, чтобы дать ресурсы на очистку дерева
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989419
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EoltВидимо после Nodes.Clear вызывать DoEvents, чтобы дать ресурсы на очистку дерева
DoEvents - не влияет на скорость очистки
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989470
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очистка тормозит из-за того, что тривью пытается перерисовать себя после удаления каждой ноды, ведь внутри Clear находится цикл. Как вариант, можно давить сабклассингом сообщения отрисовки.
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989484
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyОчистка тормозит из-за того, что тривью пытается перерисовать себя после удаления каждой ноды, ведь внутри Clear находится цикл. Как вариант, можно давить сабклассингом сообщения отрисовки.

зачем сабклассинг, надо просто дать ресурсы системе на отрисовку контрола и все будет отлично работать
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989511
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltAntonariyОчистка тормозит из-за того, что тривью пытается перерисовать себя после удаления каждой ноды, ведь внутри Clear находится цикл. Как вариант, можно давить сабклассингом сообщения отрисовки.

зачем сабклассинг, надо просто дать ресурсы системе на отрисовку контрола и все будет отлично работатьвроде неглупый парень, а такую ерунду городишь. "дать ресурсов системе" - это памяти добить? процессор поменять? :)

у активной программы и так приоритет на все ресурсы. но отрисовка все равно занимает время, сколько ресурсов не давай. это же тормзной gdi, а не быстрый directx.
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989528
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyEoltпропущено...


зачем сабклассинг, надо просто дать ресурсы системе на отрисовку контрола и все будет отлично работатьвроде неглупый парень, а такую ерунду городишь. "дать ресурсов системе" - это памяти добить? процессор поменять? :)

у активной программы и так приоритет на все ресурсы. но отрисовка все равно занимает время, сколько ресурсов не давай. это же тормзной gdi, а не быстрый directx.

причем тут память, надо дать системе процессорное время для перерисовки контрола, чтобы она забрала все произошедшие события из очереди и отработала их, в ней же стоит и процедура перерисовки TreeView
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989535
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
надо либо так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Private Const TV_FIRST As Long = &H1100
Private Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10)
Private Const TVM_DELETEITEM  As Long = (TV_FIRST + 1)
Private Const TVGN_ROOT As Long = &H0
Private Const WM_SETREDRAW As Long = &HB

Private Sub ClearTreeView(ByVal tv As TreeView)
    Dim tvHwnd As Long
    Dim lNodeHandle As Long
   
    tvHwnd = tv.hwnd
   
    SendMessageLong tvHwnd, WM_SETREDRAW, CLng(0), CLng(0)
   
    Do
        lNodeHandle = SendMessageLong(tvHwnd, TVM_GETNEXTITEM, TVGN_ROOT, CLng(0))
        If lNodeHandle > 0 Then
            SendMessageLong tvHwnd, TVM_DELETEITEM, CLng(0), lNodeHandle
        Else
            Exit Do
        End If
    Loop
   
    SendMessageLong tvHwnd, WM_SETREDRAW, CLng(1), CLng(0)
End Sub


либо Visible играться как сказал Antonary
Других вариантов не вижу
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989546
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
квик TreeviewEolt,
надо либо так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Do
        lNodeHandle = SendMessageLong(tvHwnd, TVM_GETNEXTITEM, TVGN_ROOT, CLng(0))
        If lNodeHandle > 0 Then
            SendMessageLong tvHwnd, TVM_DELETEITEM, CLng(0), lNodeHandle
        Else
            Exit Do
        End If
    Loop
   


либо Visible играться как сказал Antonary
Других вариантов не вижунельзя так делать. объектная модель будет не в курсе, что ноды удаляются.
лучше так:

Код: vbnet
1.
2.
3.
 SendMessageLong tvHwnd, WM_SETREDRAW, CLng(0), CLng(0)
 tv.Clear
 SendMessageLong tvHwnd, WM_SETREDRAW, CLng(1), CLng(0)
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989548
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltAntonariyпропущено...
вроде неглупый парень, а такую ерунду городишь. "дать ресурсов системе" - это памяти добить? процессор поменять? :)

у активной программы и так приоритет на все ресурсы. но отрисовка все равно занимает время, сколько ресурсов не давай. это же тормзной gdi, а не быстрый directx.

причем тут память, надо дать системе процессорное время для перерисовки контрола, чтобы она забрала все произошедшие события из очереди и отработала их, в ней же стоит и процедура перерисовки TreeViewхватит нести чушь.
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989765
квик Treeview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что бы новую тему не плодить спрошу ещё
Как мне определить количество Parent до моего нода?
...
Рейтинг: 0 / 0
Быстро очистить Treeview
    #38989788
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
while not myNode is nothing
    myNode = myNode.Parent
    x = x + 1
wend
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Быстро очистить Treeview
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]