Проблема с TreeNodeCollection.containsKey()

#c# #.net #treeview

#c# #.net #просмотр дерева

Вопрос:

Я создаю плагин для приложения, которое работает с концепцией семейств. Каждое семейство принадлежит к категории FamilyCategory, и каждое семейство содержит символы FamilySymbols. Хорошая древовидная структура вроде этой:

  • Семейная категория (двери)
    • Семейство (внешние двери)
      • Символ семейства (Door 2000×1000)
      • Семейный символ (Door 2000×900)
    • Семейство (гаражные ворота)
      • Символ семейства (Door 2000×2000)
      • Символ семейства (Door 2100×2000)
  • Семейная категория (Windows)
    • Семейство (одиночные окна)
      • FamilySymbol (окно 1000×1400)
      • FamilySymbol (окно 800×1400)
    • Семейство (двойные окна)
      • FamilySymbol (окно 2000×1400)
      • FamilySymbol (окно 2100×1400)

Теперь я пытаюсь создать TreeView, представляющий эту структуру. У меня есть список объектов семейства, и у каждого из них есть свойство FamilyCategory. Я пытаюсь определить, существует ли уже TreeNode с именем FamilyCategory, и если это так, я пытаюсь добавить семейство к этому узлу. Если узел для этой категории не существует, я создаю новый и добавляю туда семейство. К сожалению, приведенный ниже код всегда оценивает 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:

попробуйте заменить это:

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

этим:

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

( TreeNodeCollection.ContainsKey() выполняет поиск по Name свойству, а не по Text свойству)

Комментарии:

1. Серьезно! Ты видишь этот бумажный пакет у меня на голове? 2 часа потрачено впустую, и я даже вчера читал, что containsKey выполняет поиск в свойстве Name. Спасибо.