#c#
#c#
Вопрос:
Не могли бы вы помочь мне с некоторыми проблемами? Я попытался заполнить узлы treeview кодом, показанным здесь.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
LoadFoldersInTreeView(treeView1);
}
private void LoadFoldersInTreeView(TreeView treeName)
{
treeName.BeginUpdate();
treeName.Nodes.Add(@"D:");
DirectoryInfo dirInfo = new DirectoryInfo(@"D:Incoming");
TreeNode node = new TreeNode();
node.Text = "Files";
GetFolders(dirInfo, node);
treeName.Nodes[0].Nodes.Add(node);
treeName.Update();
}
private void GetFolders(DirectoryInfo dirInfo, TreeNode node)
{
DirectoryInfo[] dInfo = dirInfo.GetDirectories();
if (dInfo.Length > 0)
{
TreeNode treeNode = new TreeNode();
foreach (DirectoryInfo driSub in dInfo)
{
treeNode = node.Nodes.Add(text: driSub.FullName);
GetFolders(driSub, treeNode);
}
}
}
}
Когда я вызываю эту процедуру из InitializeComponent();
TreeView, она заполняется, но когда я вызываю ее из checkedListBox1_ItemCheck
, ничего не происходит.
Но мне нужно заполнить это дерево только тогда, когда элемент отмечен.
Комментарии:
1. Что
StartLoadTreeView()
делает? Ты имел в видуLoadFoldersInTreeView
? Кстати, вы пропустилиtreeName.EndUpdate();
в последнем.2. Да, должны быть LoadFoldersInTreeView . Спасибо, но имя дерева. EndUpdate(); не помогает.
3. Я попробовал ваш код, и он работает, но каким-то странным образом. После установки любого флажка содержимое папки было добавлено в новый узел «Файлы». Я думаю, вам следует очистить узлы treeview перед повторным сканированием папки. И что должно быть в
checkedListBox1
?4. Я просто пытаюсь работать с этими элементами управления и не настраиваю полный рабочий процесс.
checkedListBox1.Items[e.Index].ToString()
чтобы понять, какой элемент я проверил. Я не понимаю, почему у меня это не работает. TreeView все еще не заполнен.5. BeginUpdate отключает любой рисунок в TreeView, поэтому вам нужен EndUpdate, чтобы снова включить рисование. Если код работает из конструктора, а не из метода CheckChanged, убедитесь, что событие CheckChanged подписано.
Ответ №1:
Кажется, у меня это работает
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
FillDriveFolders("E:", treeView1);
}
public void FillDriveFolders(string drive, TreeView tree)
{
DriveInfo info = new DriveInfo(drive);
DirectoryInfo root = info.RootDirectory;
tree.BeginUpdate();
tree.Nodes.Clear();
TreeNode node = tree.Nodes.Add(root.Name);
node.Tag = root;
RecurseFolders(node, root);
tree.EndUpdate();
}
private void RecurseFolders(TreeNode node, DirectoryInfo root)
{
foreach (var dir in root.EnumerateDirectories())
{
TreeNode sub = node.Nodes.Add(dir.Name);
sub.Tag = dir;
RecurseFolders(sub, dir);
}
}
}