|
|
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
Во время работы TreeView нахватал внутрь всякий мусор. Открываеш форму в конструкторе , а в контроле уже есть дерево из шальных старых данных. Приходится при открытии делать .Nodes.Clear Как отчистить его от мусора, чтобы бри открытии был пустой без Nodes.Clear? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 10:13 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
Я эту проблему тоже решаю подобным образом, правда почему-то Nodes.Clear визуально отрабатывает медлено - сейчас пользуюсь такой функцией - нареканий Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 11:13 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
Спасибо за пример, беру на вооружение ;) Что интересно Код: plaintext 1. 2. 3. 4. отрабатывает также, а то и быстрее, чем Код: plaintext 1. Аналог этого макроса и используется в Nodes.Clear Так, что цикл можно смело выбросить. PS. а почему CLng(0) вместо 0&, хотя это наверное дело привычки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:15 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
2Shkurenko Alexander Мне и самому интересно - почему быстрей (скорей всего из-за отключения пересовки - экспереминтировать было лень - при Nodes.Clear на 200 ветках было явно заметна перерисовка - после удаления каждой записи - если хочешь - попробуй - расскажешь) а Clng(0) потому, что IDE VBA мне ставит не &0, a &O0 -и причем тут восьмиричный формат? == нечто подобное есть и для ЛистВью Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:29 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
померил -по времени на моих данных - одна фигня - но процедурка Shkurenko Alexander короче - оставлю ее :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:36 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
SV>Мне и самому интересно - почему быстрей (скорей всего из-за отключения пересовки - экспереминтировать было лень - при Nodes.Clear на 200 ветках было явно заметна перерисовка - после удаления каждой записи - если хочешь - попробуй - расскажешь) А чего пробовать, вот это должно работать почти, столь же быстро, как и твой код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. SV>а Clng(0) потому, что IDE VBA мне ставит не &0, a &O0 -и причем тут восьмиричный формат? А я и не знаю причём восмеричный :) Заметь я написал 0& . & - это символ объявления типа Long, % - Integer и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:44 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
>Заметь я написал 0&. & - это символ объявления типа Long, % - Integer и т.д. Шит. Точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:53 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
Вариант с какого-то западного сайта. Не помню какого. Node'ы удаляются снизу вверх ... Unfortunately, as VB loops through the TreeView's nodes and removes them, it also repaints the control to reflect the remaining nodes. This behavior slows down the process considerably. What's needed is a way to prevent the TreeView from repainting itself as it removes the nodes. Fortunately, the Windows API provides a great way to do just that. The SendMessage() function supports the WM_SETREDRAW message. With this message, your code can dictate whether a window should redraw (repaint) itself. Pass in True (or 1 in API parlance) to allow the window to repaint, or False (0) to prevent it. With the addition of the API to our code, the clear procedure now looks like this: Private Const WM_SETREDRAW = &HB Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub TrvwClear() Dim x As Integer With TreeView1 SendMessage .hwnd, WM_SETREDRAW, 0, 0 For x = .Nodes.Count To 1 Step -1 .Nodes.Remove x Next x SendMessage .hwnd, WM_SETREDRAW, 1, 0 End With End Sub This combination of the API and reverse deletion provides the quickest way to clear the TreeView control. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 16:46 |
|
||
|
Как отчистить TreeView в конструкторе
|
|||
|---|---|---|---|
|
#18+
2 Senin Viktor только сейчас заметил твой пост SendMessageLong hWnd, TVM_DELETEITEM, CLng(0), TVGN_ROOT а должно быть SendMessageLong hWnd, TVM_DELETEITEM, CLng(0), TVI_ROOT а лучше не извращаться, а использовать .Nodes.Clear я замерил - по скортости одинаково. Вся соль в перерисовке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 17:24 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1687&tid=1676887]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 342ms |

| 0 / 0 |
