Total Commander

 

Введение


В данной курсовой работе рассматривается изучение возможности среды программирования Microsoft Visual Studio C#, а именно компонент Treeview, а также некоторого набора стандартных операций, например, циклы, массивы, логические операции и т.д. (реализовано в практической части). # (произносится си шарп) - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Переняв многое от своих предшественников - языков C++, Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от C++).

Цели курсовой работы:

1. Написание программы, которая реализует некоторое подобие функционала программы Total Commander.

2. Изучение языка C#.

Задачи курсовой работы:

Рассмотреть компонент Treeview на практике.

Реализовать функционал программы (отображение, копирование, перемещение, переименование, удаление файлов и папок, запуск файлов, возможность выбора любого диска на данной машине).


1. Treeview C# - теория


Мы рассмотрим использование Treeview в C#. С ним связаны 3 основные класса: TreeView, TreeNode и TreeNodeCollection.

Treeview используется для отображения данных древовидной структуры, например дерева файлов. Для реализации подобных задач и используется Treeview.

Объект класса TreeNode - это одна запись дерева. Данный объект связывают со строкой, иногда - с определенным изображением. Он имеет следующие конструкторы:TreeNode();TreeNode(string text);TreeNode(string text, TreeNode[] children);TreeNode(string text, int imageIndex, int selectedImageIndex);TreeNode(string text, int imageIndex, int selectedImageIndex, TreeNode[] children);

В качестве параметров конструктор принимает: text - строку, связанную с узлом (описание узла); imageIndex - индекс изображения по умолчанию для узла; selectedImageIndex - индекс изображения для выделенного узла; children - массив дочерних объектов TreeNode (подузлов).

В классе TreeNode есть свойство Nodes, которое по сути является набором других объектов TreeNode.Свойство Nodes возвращает коллекцию узлов дерева, связанных с элементом управления TreeView. Это и есть те самые узлы дерева, которые будут отображаться, и операции с которыми следует выполнять.

public TreeNodeCollection Nodes {get;}

Чтобы добавить подузел к существующему узлу, необходимо использовать метод Add класса TreeNodeCollection. Существует 2 варианта данной функции. Первый принимает в качестве параметра описание узла, второй - объект класса TreeNode, который нужно добавить в коллекцию.

public virtual TreeNode Add(string text);virtual int Add(TreeNode node);

Для удаления подузла используется метод Remove. В данной функции только один параметр - объект класса TreeNode, который необходимо удалить.

public void Remove(TreeNode node);

Класс TreeView - это набор объектов класса TreeNode верхнего уровня. У класса TreeView также есть свойство Nodes. TreeNodeCollection Nodes {get;}

При использовании элемента управления TreeView часто используются изображения слева от текста каждого узла. Данные изображения хранятся в объекте ImageList, относящемся ко всему TreeView. Вот некоторые из свойств TreeView, связанные с ImageList:ImageList ImageList {get; set;}int ImageIndex {get; set;} //определяет рисунок по умолчаниюint SelectedImageIndex {get; set;}//определяет рисунок для выбранного узла.

Изображение можно задавать не только для узлов верхнего уровня, но и для любого объекта TreeNode при помощи похожих свойств.int ImageIndex {get; set;} //определяет рисунок по умолчаниюint SelectedImageIndex {get; set;}//определяет рисунок для выбранного узла.

Однака у TreeNode нет собственного свойства ImageList. Индексы относятся к свойству ImageList элемента управления, которому принадлежит объект TreeNode. Кроме того есть возможность указать индексы изображений при создании объекта TreeNode.

События дерева.

Приведенные ниже события происходят, когда раскрывается, сворачивается или активизируется узел. Если событие в своем названии содержит слово Before, то это событие срабатывает еще до того, как выполнится операция.

public event TreeViewCancelEventHandler BeforeCollapse;event TreeViewCancelEventHandler BeforeExpand;event TreeViewCancelEventHandler BeforeSelect;event TreeViewEventHandler AfterCollapse;event TreeViewEventHandler AfterExpand;event TreeViewEventHandler AfterSelect;

Пример:void Form1_Shown(object sender, EventArgs e)

{

treeView1.Nodes.Add(1);.Nodes.Add(2);.Nodes.Add(3);.Show(treeView1.Nodes.Count.ToString());

}


2. Разработка программы


2.1 Постановка задачи


Задание: написать программу с функционалом, примерно приближенным к функционалу программы Total Commander.

Программа обладает следующим функционалом:

1.При перетаскивании левой кнопкой мыши файл или папка будут перемещаться, а при перетаскивании правой кнопкой мыши файл или папка будут копироваться(Drag&Drop между 2 Treeview).

.Контекстное меню, которое по нажатию правой кнопки мыши будет показывать 3 пункта - удалить, переименовать, отменить.

.При двойном щелчке мыши по узлу, который отображает файл, выполнить запуск файла с помощью программы, которая используется для запуска в Windows по умолчанию.


2.2 Описание механизма программы

total commander treeview

Механизм очень простой. Для начала нам следует написать процедуру, которая отображала бы для папки её содержимое (подпапки и файлы). Вот текст этой процедуры (функции, которая ничего не возвращает):

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 Пример работы с программой.

Заключение


Язык C# очень актуален в настоящее время, предоставляет намного больше возможностей, нежели Delphi, изученный мною раннее. Писать в C# намного удобнее и интереснее и проще. Знание си подобного синтаксиса значительно упрощает изучение других языков, таких как Java, c++, c, pithon, а также изучение скриптов php и прочего.

В курсовой работе описана и реализована программа, написанная с помощью C#, похожая на Total Commander.

В результате выполнения этой работы были получены практические навыки использования C#.


Список литературы:


. Гамма Э. и др. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Питер, 2007

2. Skeet J. C# In Depth: What you need to master C# 2 and 3. Manning Publications, 2008

3. Элемент управления Дерево:http://www.programmer-lib.ru/csharp_page.php?id=42



Введение В данной курсовой работе рассматривается изучение возможности среды программирования Microsoft Visual Studio C#, а именно компонент Treeview, а

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ