Категории
Самые читаемые
Лучшие книги » Компьютеры и Интернет » Программирование » Программирование КПК и смартфонов на .NET Compact Framework - Александр Климов

Программирование КПК и смартфонов на .NET Compact Framework - Александр Климов

Читать онлайн Программирование КПК и смартфонов на .NET Compact Framework - Александр Климов

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 17 18 19 20 21 22 23 24 25 ... 52
Перейти на страницу:

  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;

 string destName =

  Path.GetDirectoryName(itemName) +

  Path.DirectorySeparatorChar.ToString() + name;

 if (isFolder)

  Directory.Move(itemName, destName);

 else

  File.Move(itemName, destName);

}

После того как будет получена информация о выделенном элементе, он переименовывается. Для реализации команды Удалить используется код, приведенный в листинге 7.18.

Листинг 7.18

private void deleteMenuItem_Click(object sender,

 System.EventArgs e) {

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

 bool isFolder = lvi.ImageIndex == 0;

 string s = "Are you sure you want to delete " + lvi.Text;

 if (isFolder)

  s += " and all its content";

 s += "?";

 if (MessageBox.Show(s, this.Text, MessageBoxButtons.YesNo,

  MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ==

  DialogResult.Yes) {

 if (isFolder)

  Directory.Delete(path + lvi.Text, true);

 else

  File.Delete(path + lvi.Text);

 fillList();

}

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

Листинг 7.19

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

 Cursor.Current = Cursors.WaitCursor;

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

 NameForm nameForm = new NameForm(this, "Новая папка", "",

  new SetNameDelegate(SetNewName));

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

 listView.Focus();

}

В результате действия этой функции отображается форма NameForm с заголовком Новая папка. Эта форма также передает информацию в главную форму при помощи метода SetNewName, который приведен в листинге 7.20.

Листинг 7.20

/// <summary>

/// Устанавливает новое имя для папки

/// </summary>

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

public void SetNewName(string name) {

 Directory.CreateDirectory(path + name);

}

Метод создает папку с заданным именем. Как видно, код его чрезвычайно прост.

Код для выполнения команды Свойства приведен в листинге 7.21.

Листинг 7.21

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

 Cursor.Current = Cursors.WaitCursor;

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

 FileInfo fi = new FileInfo(path + lvi.Text);

 PropertiesForm propertiesForm =

  new PropertiesForm(this, fi, new SetNameDelegate(SetRename),

  new SetAttributesDelegate(SetAttributes));

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

 listView.Focus();

}

Этот код вызывает форму PropertiesForm, которая отображает атрибуты выбранного файла или папки. Также в этой форме пользователь может изменять атрибуты файла при помощи метода SetAttributes, код которого приведен в листинге 7.22.

Листинг 7.22

public void SetAttributes(FileAttributes fileAttributes) {

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

 bool isFolder = lvi.ImageIndex = 0;

 if (isFolder) {

  DirectoryInfo di = new DirectoryInfo(path + lvi.Text);

  di.Attributes = fileAttributes;

 } else {

  FileInfo fi = new FileInfo(path + lvi.Text);

  fi.Attributes = fileAttributes;

 }

}

Для создания градиентной заливки соответствующего элемента интерфейса применяется метод, код которого приведен в листинге 7.23.

Листинг 7.23

public static void SetGradient(System.Windows.Forms.ListView listView) {

 // Новый вариант

 // Для .NET Compact Framework 2.0

 SendMessage(listView.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE,

  LVS_EX_GRADIENT);

 listView.Refresh();

}

Итак, основные трудности реализации программы рассмотрены. Кроме того, в примере присутствуют вызовы функций Windows API для работы с табличным списком ListView. Эти примеры рассматривались в главе 4, поэтому не стоит повторять их разбор. На самом деле эту программу можно улучшать до бесконечности, добавляя новые функциональные возможности. Надеюсь, у вас это получится. Буду рад, если вы пришлете свои варианты примеров, которые, на ваш взгляд, украсят программу.

Диспетчер задач

Но мы с вами не расстаемся с программами, написанными Кристианом Форсбергом. На его сайте можно найти еще одну полезную программу, необходимую как разработчику, так и пользователю. Это Диспетчер задач (Task Manager). Программа подобного рода тоже отсутствует в стандартной поставке Windows Mobile. А ведь эта программа очень полезна в работе. Владелец смартфона под управлением системы Windows Mobile может узнать много нового о своей системе после запуска этой утилиты. Диспетчер задач покажет все программы, которые размещаются в памяти смартфона, отбирая системные ресурсы. Диспетчер задач также позволяет удалять из памяти ненужные программы и процессы. Не случайно, многие производители сами снабжают свои устройства программами подобного типа. Если вам не повезло и у вас нет такой программы, то вы можете сами написать Диспетчер задач.

Как и предыдущий пример, оригинальная версия программы была написана на Visual Studio 2003 для смартфонов под управлением Windows Mobile 2003 на платформе .NET Compact Framework 1.0. Следуя нашей традиции, я с согласия автора конвертировал проект для Visual Studio 2005 для целевой системы Windows Mobile 5.0 и с применением .NET Compact Framework 2.0.

Графический интерфейс программы

Диспетчер задач при запуске показывает список запущенных программ (рис. 7.5).

Рис. 7.5. Внешний вид программы

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

□ Обновить — обновляет список запущенных программ;

□ Процессы — показывает список запущенных процессов;

□ Остановить — останавливает выбранную программу;

□ Остановить все — останавливает все запущенные программы;

□ Вид — показывает информацию о процессе;

1 ... 17 18 19 20 21 22 23 24 25 ... 52
Перейти на страницу:
На этой странице вы можете бесплатно скачать Программирование КПК и смартфонов на .NET Compact Framework - Александр Климов торрент бесплатно.
Комментарии