AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeView - Items mit SubItems anlegen

Ein Thema von Andreas L. · begonnen am 9. Dez 2009 · letzter Beitrag vom 9. Dez 2009
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

TTreeView - Items mit SubItems anlegen

  Alt 9. Dez 2009, 14:49
Hi,
ich möchte in einer TreeView folgende Struktur darstellen:
Code:
-Item1
--SubItem1
--SubItem2
-Item2
--SubItem1
--SubItem2
etc...
Mein aktueller Code sieht so aus:
Delphi-Quellcode:
procedure TfrmWizard.RefreshFileList;
var
  iPath, iFile: Integer;
begin
  treeFiles.Items.BeginUpdate;
  try
    treeFiles.Items.Clear;
    for iPath := 0 to damData.Config.Paths.Count - 1 do
    begin
      treeFiles.Items.AddFirst(nil, '');
      treeFiles.Items[iPath].Text := damData.Config.Paths[iPath].Path;
      treeFiles.Items[iPath].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path);

      for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do
      begin
        treeFiles.Items.AddChild(treeFiles.Items[iPath], '');
        treeFiles.Items[iPath].Item[iFile].Text := damData.Config.Paths[iPath].Files[iFile].FileName;
        treeFiles.Items[iPath].Item[iFile].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName);
      end;
    end;
  finally
    treeFiles.Items.EndUpdate;
  end;
end;
Leider wird mir folgendes in der TreeView angezeigt:
Code:
-
-
-
-
-
-
-
-
...
-Name vom letzten Item
--Name erstes SubItem
--Name zweites SubItem
--
--
--
Es werden also die Haupteinträge angelegt, jedoch nur der letzte beschriftet. Auch ist der letzte Eintrag der einzige der SubItems hat und zwar zuviele (deshalb erhalten auch nur die ersten SubItems eine Beschriftung).

Anstatt AddFirst habe ich auch schon Add und AddChild versucht. Bei letzteren erhalte ich so eine Struktur:
Code:
-Item1
--SubItem1
--SubItem2
--Item2
---SubItem1
etc...
Die Delphi-Hilfe hilft mir auch nicht. Wo liegt der Fehler?
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#2

Re: TTreeView - Items mit SubItems anlegen

  Alt 9. Dez 2009, 15:08
Hi

Wenn du einen Eintrag erstellst bekommst du ein Item zurück.
Dieses kannst du dann an die Funktion AddChild übergeben und gut.
Solltest du ein ImageIndex auch noch vergeben kommst du eh nicht darum herum.

Delphi-Quellcode:
var Item1,
    Item2 : TTreeNode;
begin
 Item1 := TreeView1.Items.AddChild(NIL,'Item1');
 Item1.ImageIndex := 1;
 Item2 := TreeView1.Items.AddChild(Item1,'SubItem1');
 Item2.ImageIndex := 2;
end;
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#3

Re: TTreeView - Items mit SubItems anlegen

  Alt 9. Dez 2009, 15:13
Auf denen Code bezogen dann so

Delphi-Quellcode:
procedure TfrmWizard.RefreshFileList;
var iPath,
    iFile : Integer;
    Item1,
    Item2 : TTreeNode;
begin
  treeFiles.Items.BeginUpdate;
  try
    treeFiles.Items.Clear;
    for iPath := 0 to damData.Config.Paths.Count - 1 do
     begin
      Item1 := treeFiles.Items.AddChild(nil, '');
      Item1.Text := damData.Config.Paths[iPath].Path;
      Item1.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path);

      for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do
       begin
        Item2 := treeFiles.Items.AddChild(Item1, '');
        Item2.Text := damData.Config.Paths[iPath].Files[iFile].FileName;
        Item2.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName);
       end;
     end;
  finally
    treeFiles.Items.EndUpdate;
  end;
end;
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: TTreeView - Items mit SubItems anlegen

  Alt 9. Dez 2009, 15:18
Dann war mein Fehler also das ich versucht habe mit treeFiles.Items[iPath] auf das neu erstelle Node zu zugreifen.

Dein Code funktioniert. Vielen Dank
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#5

Re: TTreeView - Items mit SubItems anlegen

  Alt 9. Dez 2009, 15:37
Prinzipiell sollte dein Code auch funktionieren.

Meiner Menung nach liegt der Fehler in "treeFiles.Items.AddFirst(nil, '');"
Damit stellst du den zweiten Node (B) vor den ersten (A) schreibst die Daten aber wieder an die zweite stelle (A).

Erstes "AddFirst"
+ NodeA[0] Erstes unterelement "AddChild(Imtes[0]"
Delphi-Quellcode:
+ NodeA[0]
  + NodeA.1[0]
zweites unterelement "AddChild(Imtes[0]"
Delphi-Quellcode:
+ NodeA[0]
  + NodeA.1[0]
  + NodeA.2[1]
Zweites "AddFirst"
Delphi-Quellcode:
+ NodeB[0] <------- Bleibt leer
+ NodeA[1] <------- Überschreiben
  + NodeA.1[0]
  + NodeA.2[1]
Wenn du jetzt die Daten in den Node[1] schreibst überschreibst du den ersten (in zwischen nach unten geschobenen) Knoten!

Fügst du nun wieder ein unterelement hinzu so überschreibst du wieder die alten Daten.

Delphi-Quellcode:
+ NodeB[0]
+ NodeA[1]
  + NodeA.1[0] <------- Überschreiben
  + NodeA.2[1] <------- Überschreiben
  + NodeB.1[0] <------- Bleibt leer
  + NodeB.2[1] <------- Bleibt leer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz