FileSearchWindows/FileSearch/Logic/Model/Tree/TreeBuilder.cs
Dvurechensky e2bffc8b49 1.0
Main
2024-10-05 10:06:04 +03:00

68 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace FileSearch.Logic.Model.Tree
{
public class TreeViewBuilder
{
public static void BuildTreeView(TreeView treeView, string[] paths)
{
if(paths.Length == 0) return;
// Проверяем, существует ли уже корневой узел
TreeNode rootNode = treeView.Nodes.Cast<TreeNode>().FirstOrDefault();
// Если корневой узел еще не создан, создаем его
if (rootNode == null)
{
// Извлекаем первое слово из первого пути
string rootName = GetRootName(paths[0]);
rootNode = new TreeNode(rootName);
treeView.Nodes.Add(rootNode);
}
treeView.BeginUpdate();
// Добавляем каждый путь как узел в TreeView
foreach (string path in paths)
{
AddPathToTree(rootNode, path);
}
treeView.EndUpdate();
}
private static string GetRootName(string path)
{
// Извлекаем первое слово из пути
string[] parts = path.Split('\\');
return parts[0];
}
private static void AddPathToTree(TreeNode parentNode, string path)
{
// Разбиваем путь на части
string[] parts = path.Split('\\');
// Проходим по каждой части пути
TreeNode currentNode = parentNode;
// Пропускаем первое слово, так как оно является корневым узлом
for (int i = 1; i < parts.Length; i++)
{
// Проверяем, есть ли узел с текущим именем среди дочерних узлов текущего узла
TreeNode existingNode = currentNode.Nodes.Cast<TreeNode>()
.FirstOrDefault(node => node.Text == parts[i]);
// Если узел с таким именем уже существует, переходим к следующему уровню
if (existingNode != null)
{
currentNode = existingNode;
}
// Если узел не существует, создаем новый
else
{
TreeNode newNode = new TreeNode(parts[i]);
currentNode.Nodes.Add(newNode);
currentNode = newNode;
}
}
}
}
}