2009-12-10 4 views
11

Comment lier un objet à un nœud treeview (Winforms) en C#?Liaison d'objet facile au nœud Treeview

Je pensais à quelque chose comme ExNode: Windows.Forms.Node qui peut prendre un objet en tant que membre en plus du nom de todeode ... mais je ne suis pas sûr que ce soit la bonne approche.

Répondre

17

IMHO vous avez plusieurs stratégies:

  1. coller un objet de tout type dans la propriété Tag d'un nœud: inconvénient: vous devrez jeter à son « indigène forme 'quand vous le récupérez pour l'utiliser: si cette "forme native" est autre chose que le type' Object. TreeNode, et ajoutez un champ public, Propriétés publiques, ou autre, pour vos objets ... ou même Liste ... ... ou tout ce que vous avez besoin d'associer au Nœud.

  2. en supposant que vos objets sont du même type, vous pouvez créer un dictionnaire de type: Dictionnaire < TreeNode, myObjectType >, instancier et, au besoin, stocker TreeNode et son objet associé (s) de cette façon que une paire clé/valeur.

Stratégies # 1 et # 3 ont l'avantage que vous pouvez stocker un objet associé uniquement comme stratégie nécessaire # 2: est plus adaptée au cas où vous prévoyez chaque TreeNode va avoir un objet associé (s).

Bien sûr, avec les stragies 1 et 3, vous devrez tester au moment de l'exécution la présence ou l'absence d'un objet associé à un nœud particulier. La stratégie n ° 1 est un test facile: si la propriété Tag du nœud est Null: vous savez qu'il n'y a pas d'objet: sinon null ... et il peut y avoir plus d'un type d'objet stocké dans le champ Tag. Ensuite, vous devrez retirer l'objet Tag et vous assurer qu'il est le bon type dans: (l'exemple suivant suppose qu'une classe publique, "Class1", a été affectée à la balise du premier nœud dans TreeView:

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

Stratégie # 3 est un peu plus facile puisque vous pouvez simplement évaluer si le Dictionnaire < Node, myObject > .Contains le nœud comme. Key

+0

Stratégie # 1 semble être le meilleur pour moi. Je vais essayer ça, thx – Kai

+1

Je pense que c'est la tenue d'objet plutôt que "Binding". –

1

This MSDN article a quelques bonnes informations, par exemple:

class myTreeNode : TreeNode 
{ 
    public string FilePath; 

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