Total Commander
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
?еханизм очень простой. Для начала нам следует написать процедуру, которая отображала бы для папки её содержимое (подпапки и файлы). Вот текст этой процедуры (функции, которая ничего не возвращает):
public void filltree(string path,TreeNode tv)
{
try
{
try
{
string[]dirs=System.IO.Directory.GetDirectories
(path, "*", System.IO.SearchOption.TopDirectoryOnly);
string[]files=System.IO.Directory.GetFiles
(path, "*.*", System.IO.SearchOption.TopDirectoryOnly);
Array.Sort(dirs);
Array.Sort(files);
foreach (string dir in dirs)
{
tv.Nodes.Add(dir);
if (tv.Nodes.Count != 0)
{
int i = 0;
while(tv.Nodes[i].Text != dir) i++;
tv.Nodes[i].Nodes.Add("");
}
else tv.Nodes.Add("");
}
foreach (string file in files)
tv.Nodes.Add(file);
}
catch (System.UnauthorizedAccessException)
{
MessageBox.Show("Доступ к данной папке(файлу) запрещён");
}
}
catch (System.IO.IOException)
{
MessageBox.Show("Устройство не готово");
}
}
Далее в компоненты ComboBox запишем все возможные диски данной машины. Выбранный элемент поставим первый диск(хотя бы 1 диск есть всегда, иначе откуда запущен Windows?). Затем при изменении combobox будем прорисовывать в treeview соответствующее содержимое.
Реализуем механизм Drag&Drop, сам опеределяющий какая кнопка зажата (без события MouseDown, в Treeview имеется событие ItemDrag). Текст DragDrop:
void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode NewNode;
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
if (DestinationNode.TreeView != NewNode.TreeView)
{
try
{
TreeNode t = (TreeNode)NewNode.Clone();
FileInfo fi = new FileInfo(NewNode.Text);
t.Text = DestinationNode.Text + \\ + fi.Name;
if (File.Exists(t.Text))
{
MessageBox.Show("Файл уже существует");
return;
}
if (Directory.Exists(t.Text))
{
MessageBox.Show("Папка уже существует");
return;
}
DestinationNode.Nodes.Add(t);
if (y)
{
if (File.Exists(NewNode.Text))
{
File.Move(NewNode.Text, t.Text);
treeView1.Refresh();
treeView2.Refresh();
}
Else (Directory.Exists(NewNode.Text)) Directory.Move(NewNode.Text, t.Text);
NewNode.Remove();
treeView1.Refresh();
treeView2.Refresh();
return;
}
else
{
if (File.Exists(NewNode.Text))
{
File.Copy(NewNode.Text, t.Text);
treeView1.Refresh();
treeView2.Refresh();
}
else
if (Directory.Exists(NewNode.Text))
{
Directory.Move(NewNode.Text, t.Text);
Directory.CreateDirectory(NewNode.Text);
string[] files = Directory.GetFiles(NewNode.Text);
foreach (string file in files)
{
File.Copy(file, NewNode.Text);
}
treeView1.Refresh();
treeView2.Refresh();
}
return;
}
}
catch
{
MessageBox.Show
("Не удалось выполнить перемещение или копирование");
return;
}
}
}
}
Реализуем контекстное меню, которое будем отображаться на экране щелчку на правую кнопку мыши в области узла, который иллюстрирует файл (пункты удалить, переименовать, отменить). Для каждого пишем соответствующий обработчик. Приведу пример обработчика для пункта Переименовать. Пункт меню Переименовать содержит вызов другой формы, которая показывается модально (ShowDialog), и которая реализует ввод нового имени. Вот текст обработчика:void переименоватьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (t.Parent == null)
{
MessageBox.Show("Переименование недоступно");
return;
}
Form f2 = new Form2();
f2.ShowDialog();
if(newname=="") return;
if (Directory.Exists(rightclick))
{
DirectoryInfo di = new DirectoryInfo(rightclick);
newname = t.Parent.Text + \\ + newname+di.Extension;
try
{
Directory.Move(t.Text, newname);
}
catch
{
MessageBox.Show("Такое имя уже существует");
}
}
else
if(File.Exists(rightclick))
{
FileInfo fi = new FileInfo(rightclick);
newname = t.Parent.Text + \\ + newname + fi.Extension;
try
{
File.Move(t.Text, newname);
}
catch
{
MessageBox.Show("Переименование недоступно");
}
}
}
На другой форме расположены следующие компоненты: textbox,label, 2 buttonа (готово и отмена). При нажатии на кнопку Готово новое имя зависывается в public string newname. Также, запишем обработчик DoubleClick компонента Treeview. Вот текст обработчика:
private void treeView1_DoubleClick(object sender, EventArgs e)
{
if (File.Exists((sender as TreeView).SelectedNode.Text))
{
string commandText = (sender as TreeView).SelectedNode.Text;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = commandText;
proc.StartInfo.UseShellExecute = true;
proc.Start();
}
}
2.3 Блок схемы
Рис.1. Блок схема отображения папки и её содержимого
2.4 Структуры данных
Для визуализации были использованы компоненты
Treeview - дерево файлов
Combobox - отображение и выбор диска
Label - подпись окошка ввода имени
Button - выбор соответствующего результата формы переименования
2.5 Системные требования
Для корректной работы программы необходима операционная система семейства Windows. Требуется не менее 4 Мб дискового пространства и не менее 4 Мб ОЗУ для корректной работы.
2.6 Руководство пользователя
Программа является очень простой для использования. Чтобы работать с программой нужно выполнить следующие простые шаги:
.Запустите файл Total Commander.exe
2.Выберите нужный вам диск(логическое устройство).
.Для перемещения файла используйте перетаскивание левой кнопкой мыши, для копирования - правой кнопкой.
.Для запуска меню с переименованием и удалением наведите мышь на узел, который отображает файл, нажмите правую кнопку мыши, выберите соответствующее действие.
.Для запуска файла выполните двойной щелчок.
.
Рис.4 Пример работы с программой.
Заключение<