2009-12-10 14 views
11

Wie kann ich ein Objekt an einen TreeView-Knoten (Winforms) in C# binden?Einfache Objektbindung an Treeview-Knoten

Ich dachte an etwas wie ExNode: Windows.Forms.Node, die ein Objekt als Mitglied neben dem Namen treenode nehmen kann ... aber ich bin mir nicht sicher, ob das der richtige Ansatz ist.

Antwort

17

imho haben Sie mehrere Strategien:

  1. ein Objekt beliebigen Typs in der Tag-Eigenschaft von jedem Knoten bleiben: Nachteil: Sie werden es haben werfen zurück zu seiner ‚nativen Form ', wenn Sie es abrufen, um es zu verwenden: wenn diese "native Form" etwas anderes als Typ' Objekt ist.

  2. Unterklasse TreeNode, und fügen Sie eine öffentliche Felder, öffentliche Eigenschaften oder was auch immer, für Ihre Objekte ... oder sogar Liste ... ... oder was auch immer Sie mit dem Knoten verbinden müssen.

  3. vorausgesetzt, Ihre Objekte sind von der gleichen Art, Sie einen Wörterbuch des Typs schaffen könnten: Wörterbuch < TreeNode, myObjectType >, instanziiert es, und, je nach Bedarf, speichern Sie eine TreeNode und das dazugehörige Objekt (e) auf diese Weise als ein Schlüssel/Wert-Paar.

Strategies # 1 und # 3 haben den Vorteil, dass Sie ein zugeordnetes Objekt nur bei Bedarf Strategie # 2 speichern können: ist besser geeignet für den Fall, dass Sie jedes TreeNode antizipieren ein zugehöriges Objekt haben wird (s).

Bei den Strategien # 1 und # 3 müssen Sie natürlich zur Laufzeit prüfen, ob ein Objekt, das einem bestimmten Knoten zugeordnet ist, vorhanden oder nicht vorhanden ist.

Strategie # 1 ist ein einfacher Test: Wenn die Tag-Eigenschaft des Knotens Null ist: Sie wissen, dass es kein Objekt gibt: wenn nicht null ... und es kann mehr als eine Art von Objekt im Feld Tag gespeichert sein. Dann müssen Sie das Tag-Objekt herausziehen und sicherstellen, dass es der richtige Typ ist: (Im folgenden Beispiel wird eine öffentliche Klasse angenommen, "Class1" wurde dem Tag des ersten Knotens in der TreeView zugewiesen:

TreeNode thisNode = theTreeView.Nodes[0]; 
if (((thisNode.Tag != null) && (thisNode.Tag is Class1))) ... handle the object ... 

Strategie # 3 ist ein wenig einfacher, da kann man einfach, wenn die < Wörterbuch bewerten Knoten, myObject > .Contains der Knoten als Key.

+0

Strategie # 1 scheint für mich der Beste zu sein. Ich werde das versuchen, thx – Kai

+1

Ich denke, es ist Objekt hält statt "Binding". –

1

This MSDN article hat einige gute Informationen, zum Beispiel:

class myTreeNode : TreeNode 
{ 
    public string FilePath; 

    public myTreeNode(string fp) 
    { 
     FilePath = fp; 
     this.Text = fp.Substring(fp.LastIndexOf("\\")); 
    } 
}