| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Удаление в дереве |
| Автор: Akella 13.12.2005, 08:58 |
| В дереве можно выделить несколько веток (правда выделение мышкой проблемное), так вот, как удалить выделенные ветки? |
| Автор: Albinos_x 13.12.2005, 11:32 | ||
так не прокатывает?
|
| Автор: Akella 13.12.2005, 11:56 |
| мне нужно удалить не один, а несколько выделенных, возможно, что выделенных не подряд узлов. Повторюсь, что нужет пример удаления выделенных (не подряд) узлов в дереве. |
| Автор: _hunter 13.12.2005, 12:13 |
| примерно так: for ( int item = 0; item < treeView->SelectionCount; item++ ) treeView->Items->Delete(treeView->Selections[item]); |
| Автор: Akella 13.12.2005, 12:31 |
| вечером попробую Добавлено @ 12:33 только в Delphi, наверное компилятор заставит что-то подставить, типа: TreeView1.Items[index:integer].Delete ?? и что подставить вместо индекса? |
| Автор: Snowy 13.12.2005, 12:43 | ||
|
| Автор: Albinos_x 13.12.2005, 12:52 | ||
наверно так:
|
| Автор: _hunter 13.12.2005, 12:58 |
| щас проверил treeView.Items.Delete() работает |
| Автор: Albinos_x 13.12.2005, 13:00 |
| упс ... когда писал предыдущего поста не было... |
| Автор: Snowy 13.12.2005, 13:18 | ||
| Я не проверял, но вероятно нужна будет защина на случай, если в списке выделенных есть подузлы, выделенного узла. При удалении узла - удаляются все подузлы. Так что есть вероятность, что мы попытаемся удалить уже несуществуюшую ветку. Вероятно так будет корректней:
|
| Автор: Akella 26.12.2005, 13:14 | ||||||
Snowy
List index is out of bounds Добавлено @ 13:16
удаляются все!!! ветви из дерева, но радует, что без ошибок Добавлено @ 13:18
[Error] uMain.pas(499): Not enough actual parameters |
| Автор: _hunter 26.12.2005, 13:48 |
| так там ноду указать нужно: treeView.Items.Delete(treeView.Selections[0]); + возможно treeView.Items.BeginUpdate() перед удалением вызвать нужно ( чтобы переиндексацию не проводить ) |
| Автор: Snowy 26.12.2005, 15:59 | ||||
Только при выделении подузлов. О чем я и говорил. Вот несколько более громоздкое решение, но рабочее.
|
| Автор: Quadr0 26.12.2005, 23:58 |
| ... |
| Автор: Snowy 27.12.2005, 10:09 | ||
В том-то и проблема, что с запинками. Только что проверил - если мы выделяем подузлы, то удаляет лишнее. Все дело в волшебных пузырьках, т.е. в подузлах. Я уже по разному пробовал - Selections модифицируется и вся логика начинает хромать на 3 ноги. Вот, как надежный вариант - сделал слепок состояния, а потом прибиваю по состоянию на исходный момент, чтобы уйти от этой динамики. |
| Автор: Girder 27.12.2005, 11:22 | ||
|
| Автор: Akella 27.12.2005, 11:24 |
| Так что, получается, что "нормально" никак нельзя удалить выделенные узлы, что-ли? |
| Автор: Akella 27.12.2005, 14:04 |
| Girder вроде без ошибок, но удаляет даже если ничего не выделенно, поковыряю |
| Автор: Snowy 27.12.2005, 14:12 | ||
Сыпется. List index of bounds... Добавлено @ 14:13 И бывает удаляет ненужное. |
| Автор: Girder 27.12.2005, 17:12 | ||
PS: msControlSelect=true |
| Автор: Akella 29.12.2005, 13:45 | ||
| Girder, класс с меня + этот код с форума на исходниках, вроде тоже работает, но размер кода
|