2014-12-05 4 views
3

Выполнение этого кода расширит все основные узлы под root.Как установить количество уровней для расширения узлов TreeView?

 
root 
    images 
    files 
    docs 

Но я хочу, чтобы сделать это, если я могу изменить его от 0 до 1 как-то изменить уровень таким образом она будет расширяться на следующий уровень.

 
root 
    images 
     myimages 
    files 
     myfiles 
    docs 
     mydocs 
foreach (TreeNode tn in treeView1.Nodes) 
{ 
    if (tn.Level == 0) 
     tn.Expand(); 
} 

Я пытался добавить в Еогеасп:

if (tn.Level == 1) 
    tn.Expand(); 

Но это не решение.

Возможно, мне нужно foreach в foreach?

Весь этот код является частью метода, который работает под кодом BackgroundWorker, который рекурсивно возвращает список моих каталогов и файлов FTP-сервера.

Так что в режиме реального времени, пока он получает каталоги и добавляет узлы, я хочу расширить уровень узлов.

ответ

6

Поскольку структура данных рекурсивна, ИМХО наиболее подходящим способом решения этой проблемы является ее рекурсивное перемещение. Что-то вроде этого:

void ExpandToLevel(TreeNodeCollection nodes, int level) 
{ 
    if (level > 0) 
    { 
     foreach (TreeNode node in nodes) 
     { 
      node.Expand(); 
      ExpandToLevel(node.Nodes, level - 1); 
     } 
    } 
} 

Вы назвали бы это так:

ExpandToLevel(treeView1.Nodes, 1); 

Это расширит только первый уровень. Проход 2 для расширения первых двух уровней и т. Д.

+1

Быстрая и чистая рекурсия. Любить это. –

Смежные вопросы