Как создать древовидное представление проводника файлов в C# WinForms, похожее на интерфейс проводника Windows, как покаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как создать древовидное представление проводника файлов в C# WinForms, похожее на интерфейс проводника Windows, как пока

Сообщение Anonymous »

Я работаю над приложением C# WinForms и хочу создать древовидное представление проводника, напоминающее интерфейс проводника Windows. В частности, мне нужно отображать диски, папки и файлы в иерархической древовидной структуре, как показано на прилагаемом снимке экрана.
введите здесь описание изображения
Я пробовал использовать элемент управления TreeView в C# WinForms для создания иерархической структуры. структура отображения дисков и папок. Я следовал некоторым базовым руководствам и сумел составить список дисков, но мне сложно динамически загружать папки и файлы по мере того, как пользователь расширяет узлы. Я ожидал, что древовидное представление обновится и покажет содержимое каждой папки при раскрытии, но, похоже, оно не работает должным образом. Мы будем очень признательны за любые рекомендации о том, как правильно реализовать эту функцию.

Код: Выделить всё

    private void ExportFile_Load(object sender, EventArgs e)
{
//get a list of the drives
string[] drives = Environment.GetLogicalDrives();

foreach (string drive in drives)
{
DriveInfo di = new DriveInfo(drive);
int driveImage;

switch (di.DriveType)
{
case DriveType.CDRom:
driveImage = 3;
break;
case DriveType.Network:
driveImage = 6;
break;
case DriveType.NoRootDirectory:
driveImage = 8;
break;
case DriveType.Unknown:
driveImage = 8;
break;
default:
driveImage = 2;
break;
}

TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);
node.Tag = drive;

imageList1 = new ImageList();
Icon folderIcon = ShellIcon.GetFolderIcon();
imageList1.Images.Add("folder", folderIcon);

treeView_DisplayFolder.ImageList = imageList1;

if (di.IsReady == true)
node.Nodes.Add("...");

treeView_DisplayFolder.Nodes.Add(node);
}
}

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes.Count > 0)
{
if (e.Node.Nodes[0].Text == "..." && e.Node.Nodes[0].Tag == null)
{
e.Node.Nodes.Clear();

//get the list of sub direcotires
string[] dirs = Directory.GetDirectories(e.Node.Tag.ToString());

foreach (string dir in dirs)
{
DirectoryInfo di = new DirectoryInfo(dir);
TreeNode node = new TreeNode(di.Name, 0, 1);

try
{
//keep the directory's full path in the tag for use later
node.Tag = dir;

//if the directory has sub directories add the place holder
if (di.GetDirectories().Count() > 0)
node.Nodes.Add(null, "...", 0, 0);
}
catch (UnauthorizedAccessException)
{
//display a locked folder icon
node.ImageIndex = 12;
node.SelectedImageIndex = 12;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "DirectoryLister",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
e.Node.Nodes.Add(node);
}
}
}
}
}
введите здесь описание изображения

Подробнее здесь: https://stackoverflow.com/questions/788 ... sembles-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»