2009-12-10 103 views
11

如何將對象綁定到C#中的treeview(Winforms)節點?簡單對象綁定到Treeview節點

我想到了像ExNode這樣的東西:Windows.Forms.Node可以把一個對象當作treenode名稱之外的成員......但我不確定這是否正確。

回答

17

恕我直言,你有幾種策略:

  1. 堅持任何類型的任何節點的Tag屬性的對象:缺點:你必須將它轉換回它的「原生表單',當你檢索它來使用它:如果這個「本地表單」只是類型'對象'。

  2. 子類TreeNode,併爲您的對象添加公共字段,公共屬性或任何...甚至列表......或任何您需要與節點關聯的任何東西。

  3. 假設你的對象都是同一類型的,你可以創建一個類型的字典:字典<樹節點,myObjectType >,實例化,並根據需要,存儲樹節點及其關聯的對象(s)表示方式一個鍵/值對。

策略#1和#3具有可以關聯對象存儲僅在需要策略#2的優點是:更適合於在那裏你預見所有樹節點都將有一個相關聯的對象的情況下( S)。

當然,對於#1和#3的情況,您需要在運行時測試是否存在與特定節點關聯的對象。

策略#1的一個簡單測試:如果節點的標記屬性爲空:您知道沒有對象:如果不爲空......並且標記字段中可能存在多種類型的對象.. 。然後你必須拉出Tag對象,並確保它是正確的類型,如下所示(後面的例子假定公共類「Class1」已被分配給TreeView中第一個節點的標籤:

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

戰略#3是更容易一些,因爲你可以評估該詞典<節點,myObject的>。載節點作爲重點。

+0

戰略#1似乎是最適合我。我會嘗試,thx – Kai 2009-12-10 23:16:35

+1

我認爲這是對象而不是「綁定」。 – 2012-08-28 03:18:55

1

This MSDN article有一些很好的信息,例如:

class myTreeNode : TreeNode 
{ 
    public string FilePath; 

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