Осталось для нашего дерева папок, начатаго на уроке 18, добавить метод AddTreeNodes для добавления подузлов. Вот его код (этот метод добавляем естественно, в класс формы):
// Добавление подузлов.
private void AddTreeNodes(TreeNode tn)
{
TreeNode aux;
// Получаем полный путь для папки узла.
DirectoryInfo d = new DirectoryInfo(GetFullPath(tn));
// Массив для хранения подпапок.
DirectoryInfo[] ds;
try
{
// Получаем все подпапки для папки.
ds = d.GetDirectories();
// Для каждой папки выводим ее имя и имена всех подпапок.
foreach (DirectoryInfo s in ds)
{
// Добавляем каждую подпапку.
aux = tn.Nodes.Add(s.Name);
// Устанавливаем для нее признак, что ее еще не раскрывали.
aux.Tag = "";
try
{
// Если она не пуста,
if(s.GetDirectories().GetLength(0)!=0)
{
// то добавляем в нее фиктивный узел.
aux.Nodes.Add("");
}
}
// Перехватываем исключение запрещенного доступа.
catch (UnauthorizedAccessException)
{
};
}
}
//Перехват общего исключения (например, если диск a: не вставлен).
catch(Exception)
{
}
}
Тут есть несколько тонкостей. Во-первых, мы используем исключения. Это необходимо потому, что не все диски или папки могут оказаться доступными. Во-вторых, обратите внимание, что плюсики мы добавляем не к каждому узлу, а только к непустым. Т. е. рядом с пустыми папками сразу ничего показываться не будет.
|
|
Все. Можно запускать программу. Будет она выглядеть приблизительно так:
Обратите внимание, что знак плюсика есть не у каждой папки - а именно у пустых папок его нет.