private void Navigate() { // Если директория - входим в неё if (lvFileList.SelectedItem is DirectoryCover) { //ListViewItem lvi = (ListViewItem)lvFileList.SelectedItem; //DirectoryCover cover = (DirectoryCover)lvi.Content; DirectoryCover cover = (DirectoryCover)lvFileList.SelectedItem; _BuildFileSystemView(cover.DirectoryElement); } // Если файл - запускаем else if (lvFileList.SelectedItem is FileCover) { FileCover cover = (FileCover)lvFileList.SelectedItem; //System.Diagnostics.Process process = new System.Diagnostics.Process(); //process.StartInfo.WorkingDirectory = // System.IO.Path.GetDirectoryName(cover.FileElement.FullName); //process.StartInfo.UseShellExecute = true; //process.StartInfo.FileName = cover.FileElement.FullName; //process.Start(); //ExplorerNet.Tools.LastStartedFiles.LastStartedFilesManager lsfm = // new Tools.LastStartedFiles.LastStartedFilesManager(); //lsfm.AddlastStartedFile(cover.FileElement.FullName); ExplorerNet.Tools.FileStarter.Start(cover.FileElement.FullName); } // Если елемент родительской директории - создаём его else if (lvFileList.SelectedItem is ParentDirectoryCover) { ParentDirectoryCover cover = (ParentDirectoryCover)lvFileList.SelectedItem; _BuildFileSystemView(cover.ParentDirectoryElement); } }
private void btnSumCalculate_Click(object sender, RoutedEventArgs e) { if (data.GetType() == typeof(DirectoryCover)) { if (CalculiatingState != CalculiatingStateKind.Working) { DirectoryCover dCover = (DirectoryCover)data; DirectoryInfo di = dCover.DirectoryElement; //txtSize.Background = Brushes.White; CalculiatorSize cSize = new CalculiatorSize(); cSize.UpdateFieleSum += new CalculiatorSize.UpdateFieleSumEventHandler(cSize_UpdateFieleSum); cSize.InvalidAccess += new CalculiatorSize.InvalidAccessEventHandler(cSize_InvalidAccess); cSize.ChangeCalculiatingState += new CalculiatorSize.ChangeCalculiatingStateEventHandler(cSize_ChangeCalculiatingState); Thread thread = new Thread(cSize.Calculiate); //thread.Priority = ThreadPriority. thread.IsBackground = true; thread.Start(di); } //long sum = CalculateSize(di); //txtSize.Text = SizeFileInString.GetSizeInStr(sum); } }
/// <summary> /// Создаёт отражение участка файловой системы /// </summary> /// <param name="directory"></param> private void _BuildFileSystemView(DirectoryInfo directory) { //Очищаем список //lvFileList.Items.Clear(); lvFileList.ItemsSource = null; _currentDirectory = directory; List <CustomFileSystemCover> list = new List <CustomFileSystemCover>(); //CustomFileSystemCover cover = null; //lvFileList.ItemContainerGenerator.StatusChanged += // delegate(Object sender, EventArgs e) // { // ListViewItem lvi = (ListViewItem)lvFileList.ItemContainerGenerator.ContainerFromItem(cover); // if (lvi != null) // { // lvi.PreviewMouseLeftButtonDown += delegate(Object sender, MouseButtonEventArgs e) // { // DragDrop.do // } // } // }; // Если у текущего каталога есть родительский каталог, создаём елемент, дающий возможность // перейти в родительский каталог if (directory.Parent != null) { ParentDirectoryCover cover = new ParentDirectoryCover(directory.Parent); list.Add(cover); //lvFileList.Items.Add(cover); } // Создаём елементы отражающие директории try { foreach (var dir in directory.GetDirectories()) { DirectoryCover cover = new DirectoryCover(dir); list.Add(cover); #region comments Этот вариант был исправлен на более правельный //Получаем ListViewItem, когда он будет создан и подписываемся на его события //lvFileList.ItemContainerGenerator.StatusChanged += // delegate(Object sender, EventArgs e) // { // ListViewItem lvi = (ListViewItem)lvFileList.ItemContainerGenerator.ContainerFromItem(cover); // if (lvi != null) // { // lvi.AllowDrop = true; // //Список событий. Сделан чтобы не подписываться много раз на одно событие // List<string> eventList = null; // if (lvi.Tag == null) // { // eventList = new List<string>(); // lvi.Tag = eventList; // } // else // { // eventList = (List<string>)lvi.Tag; // } //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("DragEnter")) //{ // eventList.Add("DragEnter"); // lvi.DragEnter += delegate(Object sender1, DragEventArgs e1) // { // if (e1.Effects == DragDropEffects.Move) // { // lvi.Opacity = 0.5; // } // }; //} //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("DragLeave")) //{ // eventList.Add("DragLeave"); // lvi.DragLeave += delegate(Object sender1, DragEventArgs e1) // { // lvi.Opacity = 1; // }; //} //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("Drop")) //{ // eventList.Add("Drop"); // lvi.Drop += delegate(Object sender1, DragEventArgs e1) // { // lvi.Opacity = 1; // DataObject dObj = (DataObject)e1.Data; // //Делаем не возможным обрабатывать Drop lvFileList // this.isListViewDroped = false; // if (dObj.GetDataPresent(typeof(List<CustomFileSystemCover>))) // { // // If the desired data format is present, use one of the GetData methods to retrieve the // // data from the data object. // List<CustomFileSystemCover> selectedList = dObj.GetData(typeof(List<CustomFileSystemCover>)) // as List<CustomFileSystemCover>; // //MessageBox.Show(selectedList[0].Name); // List<FileSystemInfo> fsiList = new List<FileSystemInfo>(); // foreach (var sl in selectedList) // { // if (sl.FileSystemElement.GetType() == typeof(DirectoryInfo)) // { // fsiList.Add(new DirectoryInfo(sl.FileSystemElement.FullName)); // } // else if (sl.FileSystemElement.GetType() == typeof(FileInfo)) // { // fsiList.Add(new FileInfo(sl.FileSystemElement.FullName)); // } // else // { // new Exception("Type not support!"); // } // } // DirectoryCover dc = (DirectoryCover)lvi.Content; // CopyWindow cw = new CopyWindow(fsiList, dc.FileSystemElement.FullName); // cw.ShowDialog(); // } // //DragDrop.RemovePreviewDropHandler(lvFileList, lvFileList_Drop); // }; //} //} //}; #endregion //comments } } catch (Exception) { MessageBox.Show(LanguagesManager.GetCurrLanguage().FPIsNotAccess, "", MessageBoxButton.OK, MessageBoxImage.Warning); this.Path = System.IO.Path.GetDirectoryName(this.Path); return; } // Создаём елементы отражающие файлы foreach (var file in directory.GetFiles()) { FileCover cover = new FileCover(file); list.Add(cover); //lvFileList.Items.Add(cover); } //list.Sort(new NameUpSorter()); SortingManager.Sort(list, SortingKind.NameUp); lvFileList.ItemsSource = list; // Задаём в текстовом поле текущий путь txtPath.Text = directory.FullName; this.watcher.Path = directory.FullName; //this.watcher.Changed += new FileSystemEventHandler(watcher_Changed); this.watcher.EnableRaisingEvents = true; }
//private static Point dropPoint; private void ListViewItem_Drop(Object sender, DragEventArgs e) { // var p = e.GetPosition(this); // int mov = 55; // bool xM = p.X > dropPoint.X - mov; // bool xB = p.X < dropPoint.X + mov; // bool yM = p.Y > dropPoint.Y - mov; // bool yB = p.Y < dropPoint.Y + mov; // bool rt = (xM && xB && yM && yB); // if (rt) return; //SystemParameters.mi ListViewItem lvi = (ListViewItem)sender; if (lvi.Content != null) { object content = lvi.Content; lvi.Opacity = 1; //var fff = e.Data.GetDataPresent(DataFormats.FileDrop); if (content.GetType() == typeof(DirectoryCover)) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); List <FileSystemInfo> fsiList = new List <FileSystemInfo>(); foreach (var f in files) { FileSystemInfo fsi = null; if (Directory.Exists(f)) { fsi = new DirectoryInfo(f); } else if (File.Exists(f)) { fsi = new FileInfo(f); } else { throw new Exception("Its not a directory and not a file!"); } fsiList.Add(fsi); } isListViewDroped = false; DirectoryCover dc = (DirectoryCover)lvi.Content; CopyWindow cw = new CopyWindow(fsiList, dc.FileSystemElement.FullName); cw.ShowDialog(); //string[] files = (string[])dObj.GetData(DataFormats.FileDrop); // MessageBox.Show(files.ToString()); } } } //ListViewItem lvi = (ListViewItem)sender; //if (lvi.Content != null) //{ // object content = lvi.Content; // if (content.GetType() == typeof(DirectoryCover)) // { // if (e.Effects == DragDropEffects.Move) // { // lvi.Opacity = 1; // DataObject dObj = (DataObject)e.Data; // //Делаем не возможным обрабатывать Drop lvFileList // this.isListViewDroped = false; // if (dObj.GetDataPresent(typeof(List<CustomFileSystemCover>))) // { // // If the desired data format is present, use one of the GetData methods to retrieve the // // data from the data object. // List<CustomFileSystemCover> selectedList = dObj.GetData(typeof(List<CustomFileSystemCover>)) // as List<CustomFileSystemCover>; // //MessageBox.Show(selectedList[0].Name); // List<FileSystemInfo> fsiList = new List<FileSystemInfo>(); // foreach (var sl in selectedList) // { // if (sl.FileSystemElement.GetType() == typeof(DirectoryInfo)) // { // fsiList.Add(new DirectoryInfo(sl.FileSystemElement.FullName)); // } // else if (sl.FileSystemElement.GetType() == typeof(FileInfo)) // { // fsiList.Add(new FileInfo(sl.FileSystemElement.FullName)); // } // else // { // new Exception("Type not support!"); // } // } // DirectoryCover dc = (DirectoryCover)lvi.Content; // CopyWindow cw = new CopyWindow(fsiList, dc.FileSystemElement.FullName); // cw.ShowDialog(); // } // } // } //} }