Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Быстро очистить Treeview / 18 сообщений из 18, страница 1 из 1
22.06.2015, 08:45
    #38989351
квик Treeview
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро очистить Treeview
Подскажите как быстро очистить Treeview?

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

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

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

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

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

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

Спасибо.

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

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

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

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


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

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

причем тут память, надо дать системе процессорное время для перерисовки контрола, чтобы она забрала все произошедшие события из очереди и отработала их, в ней же стоит и процедура перерисовки TreeView
...
Рейтинг: 0 / 0
22.06.2015, 12:20
    #38989535
квик Treeview
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро очистить 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
22.06.2015, 12:28
    #38989546
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро очистить Treeview
квик 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
22.06.2015, 12:31
    #38989548
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстро очистить Treeview
EoltAntonariyпропущено...
вроде неглупый парень, а такую ерунду городишь. "дать ресурсов системе" - это памяти добить? процессор поменять? :)

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

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


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