Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление в дереве, выделенных веток 
:(
    Опции темы
Akella
  Дата 13.12.2005, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В дереве можно выделить несколько веток (правда выделение мышкой проблемное), так вот, как удалить выделенные ветки? smile

smile
PM MAIL   Вверх
Albinos_x
Дата 13.12.2005, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



так не прокатывает?
Код
...
TreeView1.Selected.Delete;
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Akella
Дата 13.12.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



мне нужно удалить не один, а несколько выделенных, возможно, что выделенных не подряд узлов.
Повторюсь, что нужет пример удаления выделенных (не подряд) узлов в дереве.
PM MAIL   Вверх
_hunter
Дата 13.12.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



примерно так:
for ( int item = 0; item < treeView->SelectionCount; item++ )
treeView->Items->Delete(treeView->Selections[item]);



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 13.12.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



вечером попробую
Добавлено @ 12:33
только в Delphi, наверное компилятор заставит что-то подставить, типа:

TreeView1.Items[index:integer].Delete

?? и что подставить вместо индекса?
PM MAIL   Вверх
Snowy
Дата 13.12.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

for i:=0 to TreeView1.SelectionCount-1 do
  TreeView1.Selections[i].Delete;

PM MAIL   Вверх
Albinos_x
Дата 13.12.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



наверно так:
Код
...
var i:integer;
begin
for i:=0 to TreeView1.SelectionCount do
    TreeView1.Selected.Item[i].Delete;
...


Это сообщение отредактировал(а) Albinos_x - 13.12.2005, 12:53


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
_hunter
Дата 13.12.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



щас проверил
treeView.Items.Delete()
работает


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Albinos_x
Дата 13.12.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



упс ... когда писал предыдущего поста не было... smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Snowy
Дата 13.12.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Я не проверял, но вероятно нужна будет защина на случай, если в списке выделенных есть подузлы, выделенного узла.
При удалении узла - удаляются все подузлы.
Так что есть вероятность, что мы попытаемся удалить уже несуществуюшую ветку.
Вероятно так будет корректней:
Код

while TreeView1.Selected<>nil do begin
  TreeView1.Selected.Delete;
  Application.ProcessMessages;
end;

PM MAIL   Вверх
Akella
Дата 26.12.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Snowy
Цитата(Snowy @ 13.12.2005, 12:43)
1:
2:

for i:=0 to TreeView1.SelectionCount-1 do
  TreeView1.Selections[i].Delete;


List index is out of bounds smile

Добавлено @ 13:16
Цитата(Snowy @ 13.12.2005, 13:18)
Я не проверял, но вероятно нужна будет защина на случай, если в списке выделенных есть подузлы, выделенного узла.
При удалении узла - удаляются все подузлы.
Так что есть вероятность, что мы попытаемся удалить уже несуществуюшую ветку.
Вероятно так будет корректней:

код Pascal/Delphi
1:
2:
3:
4:

while TreeView1.Selected<>nil do begin
  TreeView1.Selected.Delete;
  Application.ProcessMessages;
end;

удаляются все!!! ветви из дерева, но радует, что без ошибок
Добавлено @ 13:18
Цитата(_hunter @ 13.12.2005, 12:58)
щас проверил
  treeView.Items.Delete()ж;
работает


[Error] uMain.pas(499): Not enough actual parameters
PM MAIL   Вверх
_hunter
Дата 26.12.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



так там ноду указать нужно:
treeView.Items.Delete(treeView.Selections[0]);
+ возможно treeView.Items.BeginUpdate() перед удалением вызвать нужно ( чтобы переиндексацию не проводить )



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 26.12.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(dsergey @ 26.12.2005, 13:14)
List index is out of bounds

Только при выделении подузлов. О чем я и говорил.
Вот несколько более громоздкое решение, но рабочее.
Код

var
  i: integer;
  lst: TList;
begin
  lst:=TList.Create;
  for i:=TreeView1.SelectionCount-1 downto 0 do
    lst.Add(TreeView1.Selections[i]);
  for i:=0 to lst.Count-1 do
    TTreeNode(lst[i]).Delete;
  lst.Free;
end;

PM MAIL   Вверх
Quadr0
Дата 26.12.2005, 23:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 02:58
  Вверх
Snowy
Дата 27.12.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Quadr0 @ 26.12.2005, 23:58)
Работает без запинок.

В том-то и проблема, что с запинками.
Только что проверил - если мы выделяем подузлы, то удаляет лишнее.
Все дело в волшебных пузырьках, т.е. в подузлах.
Я уже по разному пробовал - Selections модифицируется и вся логика начинает хромать на 3 ноги.
Вот, как надежный вариант - сделал слепок состояния, а потом прибиваю по состоянию на исходный момент, чтобы уйти от этой динамики.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.