Был долго занят с работой, поэтому ничего нового не публиковал. Вот появилось время, решил написать про файловый менеджер.
Задачи:
просмотр дисков и папок компьютера
показывание файлов, находящихся на диске или в папке.
В общем идея такая, чтобы рядом с именем диска была стрелочка, которая разворачивает вниз список папок, а рядом, во втором окне, показывались файлы.
Делал на WPF. Добавляем 1 treeview и 1 listview(пробовал с listBox, но там глюк с отображением содержимого папок), затем пишем такой код.
public MainWindow() { InitializeComponent(); TreeViewDrivers(); } void TreeViewDrivers() { foreach (DriveInfo drive in DriveInfo.GetDrives()) { TreeViewItem item = new TreeViewItem(); item.Tag = drive; item.Header = drive.ToString(); item.Items.Add("*"); //trw_Products.Items.Add(item); treeView1.Items.Add(item); item.Expanded += new RoutedEventHandler(item_DirExpanded); } } void item_DirExpanded(object sender, RoutedEventArgs e) { TreeViewItem item = (TreeViewItem)e.OriginalSource; item.Items.Clear(); DirectoryInfo dir; if (item.Tag is DriveInfo) { DriveInfo drive = (DriveInfo)item.Tag; dir = drive.RootDirectory; } else dir = (DirectoryInfo)item.Tag; try { foreach (DirectoryInfo subDir in dir.GetDirectories()) { TreeViewItem newItem = new TreeViewItem(); newItem.Tag = subDir; newItem.Header = subDir.ToString(); newItem.Items.Add("*"); item.Items.Add(newItem); newItem.Expanded += new RoutedEventHandler(Item_FileExpanded); } } catch { } } void Item_FileExpanded(object sender, RoutedEventArgs e) { TreeViewItem item = (TreeViewItem)e.OriginalSource; item.Items.Clear(); DirectoryInfo driv; if (item.Tag is DriveInfo) { DriveInfo dr = (DriveInfo)item.Tag; driv = dr.RootDirectory; } else driv = (DirectoryInfo)item.Tag; try { listView1.Items.Clear(); foreach (FileInfo fi in driv.GetFiles()) { TreeViewItem newItem1 = new TreeViewItem(); newItem1.Tag = fi; newItem1.Header = fi.ToString(); newItem1.Items.Add("*"); item.Items.Add(newItem1); listView1.Items.Add(fi); } } catch { } }
P.S. Проект ещё "сырой", но я буду его потихоньку дорабатывать, может что дельное и получится.
Добавления "*" с операциями Clear() использовались для дебагинга?
ОтветитьУдалитьтакже проверка
if (item.Tag is DriveInfo)
{
DriveInfo dr = (DriveInfo)item.Tag;
driv = dr.RootDirectory;
}
второй раз кажется лишней, не находите?
Код не мой. В этот блог я записываю не только свой код, но и чужой. Здесь все в качестве шпаргалки. Зачем делалось так, а не иначе я уже не помню. У меня работало и мне этого было достаточно.
УдалитьСпасибо
ОтветитьУдалитьЯ немного развил идею, добавил некоторый функционал, в частности многопоточность, и реализовал с использованием паттерна MVP. Если кому интересно - велком на Github - https://github.com/rhafizov/MyFirstFileManager
ОтветитьУдалить