C # Удалить дубликаты дочерних / внучатых / правнучелых узлов в древовидной структуре - PullRequest
0 голосов
/ 30 января 2019

У меня есть дерево, которое генерируется динамически.Моя проблема в том, что он добавляет те же узлы - он получает список из другого приложения, хотя тот же элемент повторяется, но я не хочу включать повторяющиеся элементы в мое древовидное представление.Я пытался избежать добавления узла в первом случае;но не удалось.Мой код, чтобы проверить, существует ли ниже (пробовал несколько):

if(treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2].Nodes.Find(childnode.Name,true).Length>0)
 { 
treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2].Nodes.Add(childnode); 
 }

и

if(treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2].Nodes.Contains(childnode.Name))
 { 
treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2].Nodes.Add(childnode); 
 }

1 Ответ

0 голосов
/ 30 января 2019

Я думаю, что проблема может заключаться в том, что когда вы создаете дочерние узлы, они являются технически разными объектами, даже если все их свойства одинаковы.Таким образом, node.Contains (childnode) в этом случае не вернет true.

Вместо этого вы можете добавить функцию, которая перебирает все свойства имени на узле, ища совпадение:

public bool CheckNameExists(TreeNode parent, string text)
{
    foreach (TreeNode item in parent.Nodes)
    {
        if (item.Name == text) return true;
    }

    return false;
}

Итак, я бы взял ваш второй пример и изменил бы его на:

if(CheckNameExists(treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2], childnode.Name) == false)
{ 
    treeViewLeft.Nodes[0].Nodes[index1].Nodes[index2].Nodes.Add(childnode); 
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...