Avatar billede fixxxer Nybegynder
07. august 2003 - 20:44 Der er 7 kommentarer og
1 løsning

avanceret slet af nodes i treeview

Jeg har et treeview, med fx dette indhold:

-Start
| +Mappe1
| | +Mappe2
| | -Fil3
| -Fil2
-Fil1


Hvis jeg sletter Fil2 skal mappe1 naturligvis ikke slettes da denne stadig har Mappe2, og herunder Fil3. Men sletter jeg Fil3 skal både mappe2 og mappe1 slettes, da vi jo lige slettede Fil2.

Dette er en skitse, strukturen er 100% variabel, så koden skal naturligvis være dynamisk.

Bring it on...
Avatar billede zerohero Nybegynder
07. august 2003 - 21:12 #1
Er det ikke bare at lave en søge funktion der ser om der findes filer (Childeren navngivet noget med 'Fil') i nogen af mapperne og dernæst slette dem, hvis de altså er tomme for filer?
Avatar billede fixxxer Nybegynder
07. august 2003 - 21:58 #2
det er vist mere kompliceret end som så, ihvertfald at forklare...

kan jeg sende dig et eks.?
Avatar billede dkn Nybegynder
07. august 2003 - 22:00 #3
det ville være nemmest hvis du selv lavede dette, hvis vi lige gav dig ideerne til det altså.

Det er svært at hjælpe udenvidere.
- hvordan ved du om en node er en mappe? har du gemt et object i dens data property?
- samme med fil?

Når du ved hvordan du kan tjekke om en given node er en mappe eller fil skulle det ikke være noget problem.

Hvis selected = fil så bare delete normal.

Hvis mappe, se om den indeholder subitems af type fil, cancel.
Hvis ikke slet alle under mapper (hvis der er nogle).

Det lyder jo meget nemt...
Avatar billede fixxxer Nybegynder
07. august 2003 - 22:08 #4
ja gid det var så nemt.

jeg ved de er mapper, da de jo har en child, indtil det øjeblik childen bliver slettet, og så kan man jo egenlig godt sige det ikke er en mappe mere, og derfor skal den også slettes. en anden ting jeg ved på at det er en mappe, er at den er created med en anden ImageIndex, og det er sådan set også det eneste der skilder filer og mapper ad.
Avatar billede dkn Nybegynder
07. august 2003 - 22:11 #5
ok send det du har til dkn@pc.dk
Avatar billede fixxxer Nybegynder
07. august 2003 - 22:23 #6
tror sku lige jeg fik en hjerneblødning...


var
  I: Integer;
  SelNode, ParentNode: TTreeNode;
begin
  if TreeView1.Selected = nil then Exit;
  SelNode := TreeView1.Selected;
  if SelNode.HasChildren then Exit;

  ParentNode := SelNode.Parent;
  SelNode.Delete;

  if ParentNode.Count = 0 then begin
    repeat
      ShowMessage(ParentNode.Text);
      SelNode := ParentNode;
      ParentNode := SelNode.Parent;
      SelNode.Delete;
    until (ParentNode.Count > 0) or (ParentNode.Level = 0)
  end;

har jeg overset noget? det lader nemlig til at virke
Avatar billede fixxxer Nybegynder
07. august 2003 - 22:35 #7
nej den virker heller ik, men denne her gør...

var
  I: Integer;
  SelNode, ParentNode: TTreeNode;
begin
  if TreeView1.Selected = nil then Exit;
  SelNode := TreeView1.Selected;
  if SelNode.HasChildren then Exit;

  ParentNode := SelNode.Parent;
  SelNode.Delete;

  if ParentNode.Count = 0 then begin
    repeat
      if ParentNode.Level = 0 then Exit;
      SelNode := ParentNode;
      ParentNode := SelNode.Parent;
      SelNode.Delete;
    until (ParentNode.Count > 0)
  end;

tillader mig at lukke
Avatar billede fixxxer Nybegynder
07. august 2003 - 22:35 #8
det var et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester