Frage

TTreeNode keine Visible-Eigenschaft, so die offensichtliche Option existiert nicht. Gibt es eine andere Art und Weise ein TTreeNode und alle untergeordneten Knoten unsichtbar zu machen? Natürlich möchte ich in der Lage sein, um es wieder sichtbar später zu machen.

Dies ist mit Delphi 2007.

Hinweis # 1:. Ich bin mir bewusst, des alternativen TVirtualTreeView, und ich werde es überprüfen, ob es keine einfache Möglichkeit, dies zu tun mit TTreeView

Hinweis # 2: Ich brauche die Option nur für Top-Level-Knoten. Diejenigen, möchte ich in der Regel verbergen nicht einmal Kinder haben.

War es hilfreich?

Lösung

Es ist eine gute Idee, getrennte Daten von der Benutzeroberfläche , und dieses Problem mit Baumstrukturen ist ein gutes Beispiel - nicht speichern Daten in einer Baumansicht . Ich habe oft eine nicht-visuelle Einheit, die eine strukturierte Klasse enthält, die Daten speichert. Eine Benutzerschnittstelleneinheit kann eine Strukturansicht, die kann Displays (a konfigurierbare Teilmenge von) Daten aus dieser Klasse. Es gibt eine Vielzahl von Möglichkeiten, um Daten zwischen den beiden zu bewegen. Diese Art der Isolierung erfordert ein wenig Planung, bietet aber eine viel größere Flexibilität und Stabilität.

Andere Tipps

Wenn Sie eine bessere Baumkomponente verwenden möchten, warum nicht VirtualTreeView verwenden. Es ist eines der besten Komponenten jemals für Delphi entwickelt und es ist kostenlos mit Quelle nutzen zu können! Aber es gibt vielleicht ein logisches Problem mit einer TTreeNode versteckt! Sollte der Baum zeigt eine +, wenn keine Knoten sichtbar sind?

http://wiki.lazarus.freepascal.org/VirtualTreeview

TTreeView ist ein Wrapper für die Standardansicht von Windows Baum, der (von der Dokumentation auf MSDN ) erlaubt keinen Baumknoten zu verstecken. Es macht Sinn machen, wie die Baumansicht bekannt ist, nicht auf eine große Anzahl von Knoten zu skalieren, so dass Knoten Baum versteckt, anstatt alles zu entfernen, die nicht notwendig ist, wäre eine schlechte Idee sein.

Sie können Ihr Leben ein wenig leichter machen, wenn Sie nur die Top-Level-Knoten (die Sie ausblenden möchten) entfernen und einfügen, und erstellen Sie alle untergeordneten Knoten in der OnExpanding Ereignis des Wieder- Knoten hinzugefügt. Dazu einfach einstellen müssen die HasChildren Eigenschaft des Knotens auf true gesetzt.

Der einzige Weg, ein Knoten in TTreeView zu „verstecken“ ist, um es tatsächlich zu entfernen. Dann auf „Show“ der Knoten, geben Sie einfach wieder einsetzen wieder.

Wie habe ich es in dxe5 mit Standard TTreeView. Ich denke, es wird für einige Leute nützlich sein. Ich habe es zum Beispiel einfach gemacht:

1. Artikel, die versteckt werden muss. Ich habe Imageindex davon 2.

  var
    Node:TTreeNode;
  begin
  ...
  Node:=Tree.Items.AddChild(ParentNode,'Text');
  Node.ImageIndex:=2;

2. Jetzt stelle ich onAdvancedCustomDrawItem Fall TTreeView.

  if Node.ImageIndex=2 then
  begin
    DefaultDraw:=false;
    Node.Parent.HasChildren:=false;
  end;

3. Prüfen Sie es mit OnClick-Ereignis von TTreeView:

var
 Tree:TTreeView;
 Node:TTreeNode;
begin
  Tree:=Sender as TTreeView;
  if Tree.Selected.Index>-1 then
   if Tree.Selected.HasChildren then
    if Tree.Selected.getFirstChild.ImageIndex=2 then
     showmessage(Tree.Selected.getFirstChild.Text);

Fertig. Ich hoffe, es wird Ihnen hilft.

ich lösen dieses Problem, indem Sie den Knoten zu einem anderen nicht expandierten Knoten bewegt und umgekehrt. Ich kann es in der getan Event-Handler auf die Erweiterung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top