Чтение онлайн

ЖАНРЫ

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

path.Substring(0,

path.Length - 1).LastIndexOf(Path.DirectorySeparatorChar) + 1);

fillList;

 } else if (isFolder) {

path += lvi.Text + Path.DirectorySeparatorChar;

fillList;

 } else

ShellExecute.Start(path + lvi.Text);

 Cursor.Current = Cursors.Default;

}

После нажатия кнопки действия приложение получает информацию о выделенном пункте. Если выделена специальная

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

Теперь разберем код для команд меню. Для команды

Вырезать
код приведен в листинге 7.12.

Листинг 7.12

private void cutMenuItem_Click(object sender, System.EventArgs e) {

 ListViewItem lvi =

listView.Items[listView.SelectedIndices[0]];

 clipboardFileName = this.path + lvi.Text;

 clipboardAction = ClipboardAction.Cut;

}

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

Копировать
, приведен в листинге 7.13.

Листинг 7.13

private void copyMenuItem_Click(object sender, System.EventArgs e) {

 ListViewItem lvi = listView.Items[listView.SelectedIndices[0]];

 clipboardFileName = path + lvi.Text;

 clipboardAction = ClipboardAction.Copy;

}

Для команды меню

Вставить
код немного усложняется. Он приведен в листинге 7.14.

Листинг 7.14

private void pasteMenuItem_Click(object sender, System.EventArgs e) {

 // Если файл существует

 string dest = path + Path.GetFileName(clipboardFileName);

 if (File.Exists(dest)) {

if (MessageBox.Show("Файл уже существует, перезаписать?", this.Text,

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) == DialogResult.Yes)

File.Delete(dest);

else return;

 }

 // Перемещаем или копируем

 string s = path.Substring(0, path.Length - 1);

 switch(clipboardAction) {

 case ClipboardAction.Cut:

File.Move(clipboardFileName, dest);

break;

 case ClipboardAction.Copy:

File.Copy(clipboardFileName, dest, false);

break;

 }

 clipboardAction = ClipboardAction.None;

 clipboardFileName = string.Empty;

 fillList;

}

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

узнать, что он хочет сделать. Код для команды
Вставить ярлык
приведен в листинге 7.15.

Листинг 7.15

private void pasteShortcutMenuItem_Click(object sender, System.EventArgs e) {

 int i = 2;

 string s = string.Empty;

 string dest;

 while(true) {

dest = path + "Shortcut" + s + " to " +

Path.GetFileName(Path.GetFileNameWithoutExtension(clipboardFileName) +

".lnk");

if (!File.Exists(dest)) break;

s = " (" + i.ToString + ")";

i++;

 }

 StreamWriter sw = new StreamWriter(dest);

 s = clipboardFileName;

 if(s.IndexOf(" ") > 0)

s = "\"" + s + "\"";

 s = s. Length.ToString + "#" + s;

 sw.WriteLine(s);

 sw.Close;

 fillList;

}

В этом коде создается уникальное имя ярлыка, которое затем записывается в виде файла с добавлением. К имени ярлыка добавляется расширение

.LNK
.

Код для команды

Переименовать
приведен в листинге 7.16.

Листинг 7.16

private void renameMenuItem_Click(object sender, System.EventArgs e) {

 Cursor.Current = Cursors.WaitCursor;

 istViewItem lvi = listView.Items[listView.SelectedIndices[0]];

 bool isFolder = lvi.ImageIndex = 0;

 string s;

 if (isFolder)

s = "папку";

 else s = "файл";

 NameForm nameForm =

new NameForm(this, "Переименовать " + s, lvi.Text,

new SetNameDelegate(SetRename));

 if (nameForm.ShowDialog = DialogResult.OK) fillList;

 listView.Focus;

}

Сначала обрабатывается текущий выделенный элемент. Если пользователь выделил папку, то для формы

nameForm
задается соответствующий заголовок
Переименовать папку
. Также из этой формы передается в основную форму новое имя папки или файла с помощью метода
Set Rename
, как это показано в листинге 7.17.

Листинг 7.17

/// <summary>

/// Метод для переименования папки или файла

/// </summary>

/// <param name="name">Имя папки или файла</param>

public void SetRename(string name) {

 ListViewItem lvi = listView.Items[listView.SelectedIndices[0]];

 bool isFolder = lvi.ImageIndex == 0;

 string itemName = path + lvi.Text;

Поделиться с друзьями: