Урок 19. TreeView для каталогов - продолжение

Продолжаем заниматься нашим деревом каталогов.

Вот код обещанного на прошлом уроке метода NodeExpand:

// Раскрытие ветки дерева. private void NodeExpand(TreeNode tn) { // Если есть подузлы. if(tn.Nodes.Count!=0) { // Если раскрываем в первый раз. if(((string)tn.Tag)=="") { // Удаляем фиктивный узел. tn.Nodes.RemoveAt(0); // Добавляем подузлы. AddTreeNodes(tn); // Устнавливаем признак того, что // узел уже раскрывали и добавили в него все подузлы. tn.Tag = "+"; } } }

Тут мы опять делаем только часть работы (чтобы не запутаться) - а именно вызываем пока не написанный нами метод AddTreeNodes. Наш код достаточно прост - а именно мы раскрываем наш узел только если он не пуст (проверка условия tn.Nodes.Count!=0). Если он не пуст, то мы удаляем добавляемый при создании фиктивный узел (который служил только для того, чтобы показать знак "+" для непустых папок у нашего дерева) и добавляем реальные подузлы (напомним еще раз, что для этого нам еще предстоит написать метод AddTreeNodes). Далее мы устанавливаем для нашего узла признак того, что он уже раскрывался и что нам для него не надо будет добавлять узлы (т. е. записываем в свойство Tag значение "+").

Давайте на этом уроке напишем еще один вспомогательный метод - GetFullPath. Этот метод по узлу нашего дерева возвращает полный путь (т. е. от корневого узла (папки), до нашего узла (папки), включая все промежуточные узлы (папки)). Вот код метода GetFullPath:

// Получение полного имени папки по узлу. private String GetFullPath(TreeNode tn) { // Устанавливаем текуший узел на переданный в параметре. TreeNode currNode = tn; // В полное имя пока записываем текст, // показываемый в текущем узле. String fullPath = currNode.Text; // Двигаемся к корню дерева. while(currNode.Parent!=null) { // Переходим на родительский узел. currNode = currNode.Parent; // К полному имени приписываем текст родитеского узла. fullPath= currNode.Text + @"\" + fullPath; } // Возвращаем полный путь. return fullPath + @"\"; }

Принцип работы этого метода такой - берем родительский узел для нашего узла, приписываем его текст влева, потом берем родительский узел для родительского, берем узел для него и т. п., пока не окажемся в корневом узле (который соответствует диску в файловой системе).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: