TreeView kasowanie wielu zaznaczonych elementów

0

Ustawiłem właściwość Multiselect na true i chciałbym kasowac zaznaczone elementy. Proszę o podpowiedź jak do tego podejść. Myślałem że:

for i := 0 to TreeView.SelectionCount - 1 do
begin
if( TreeView.Selections[i].Data <> nil ) then TIndex(TreeView.Selections[i].Data).Free;
TreeView.Selections[i].Delete;
end;


załatwi sprawę jednak się myliłem.
0

w czasie usowania elementow zmniejsza Ci sie ilosc zaznaczonych elementow,
a Ty robiac petle for kazesz mu wykonac n razy kasowanie i-tego lelmentu.
po skasowaniu pierwszego lelementu masz ich juz zaznaczonych o jednego mniej.
i tak po wykonaniu okolo polowy petli zaczynasz kasowac elementy o indeksie ktorego juz nie ma.
Zeby tego uniknac zrob tak:

  
while TreeView.SelectionCount > 0 do
  begin
    if(  TreeView.Selections[0].Data <> nil  ) then TIndex(TreeView.Selections[0].Data).Free;
    TreeView.Selections[0].Delete;
  end;

Oczywiscie pisze z glowy i bez testowania wiec nie daje 100% pewnosci

0

Problem polega na tym, że po usunięciu elementu zaznnacza sie element nad a poprzednie zaznaczenie ucieka wiec zaproponowana petla nie spełnia zadania. Ostatecznie zrezygnowałem z kasowania wielu elementów. Jednak problem pozostaje otwarty.

0

To moze inaczej:

Obiekt TTreeNode ma wlasciwosc SELECTED.
zrob jakas petle po elementach (jak masz ich malo to po wsystkich aa jak duzo to wymysl cos sensownego)
i jesli jest selected to kasuj go - powinno zadzialac

0

Tak. To wydaje się być dobrym rozwiązaniem. Dziekuje za odpowiedź i zainteresowanie temetem.

0

Troche pozno dopisuje sie do tematu ale proponuje zapamietac zaznaczone elementy np w tablicy a potem je wyszukiwac i kasowac rozwiazanie troche na okolo ale nie wymaga innego komponentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1