TreeNodeCollection.ContainsKey()的问题

时间:2011-05-21 01:07:49

标签: c# .net treeview

我正在为一个适用于家庭概念的应用程序创建一个插件。 每个族都属于一个FamilyCategory,每个族都包含FamilySymbols。 一个很好的树结构:

  • FamilyCategory(门)
    • 家庭(外门)
      • FamilySymbol(Door 2000x1000)
      • FamilySymbol(Door 2000x900)
    • 家庭(车库门)
      • FamilySymbol(Door 2000x2000)
      • FamilySymbol(Door 2100x2000)
  • FamilyCategory(Windows)
    • 家庭(单一窗口)
      • FamilySymbol(Window 1000x1400)
      • FamilySymbol(Window 800x1400)
    • 家庭(双窗)
      • FamilySymbol(Window 2000x1400)
      • FamilySymbol(Window 2100x1400)

现在我正在尝试构建一个表示该结构的TreeView。我有一个Family对象列表,每个对象都有一个FamilyCategory属性。我正在尝试确定是否已存在具有FamilyCategory名称的TreeNode,如果确实存在,我正在尝试将Family添加到该节点。如果该类别的节点不存在,我创建一个新节点并在那里添加该族。 不幸的是,下面的代码总是将categoryExists评估为false。

foreach (Family family in families)
{
    string familyCategoryName = family.FamilyCategory.Name;

    bool categoryExists = treeView.Nodes.ContainsKey(familyCategoryName);

    if (categoryExists)
    {
        categoryNode = treeView.Nodes[familyCategoryName];
    }
    else
    {
        categoryNode = new TreeNode(familyCategoryName);
        treeView.Nodes.Add(categoryNode);
    }

    TreeNode familyNode = new TreeNode(family.Name);

    categoryNode.Nodes.Add(familyNode);

    foreach (FamilySymbol familySymbol in family.Symbols)
    {
        familyNode.Nodes.Add(familySymbol.Name);
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:9)

尝试替换它:

categoryNode = new TreeNode(familyCategoryName);
treeView.Nodes.Add(categoryNode);

由此:

categoryNode = new TreeNode(familyCategoryName);
categoryNode.Name = familyCategoryName;
treeView.Nodes.Add(categoryNode);

TreeNodeCollection.ContainsKey()搜索Name属性,而不是Text属性