Программирование КПК и смартфонов на .NET Compact Framework — страница 29 из 41

VideoTypes
позволяет выбрать тип видеоматериала. На устройствах под управлением Windows Mobile 5.0 используется видеоматериал двух типов — Multimedia Messaging Service (MMS) и Windows Media Video (WMV).

Повторение пройденного

Примеры доступа к объектам Pocket Outlook рассматривались применительно к карманным компьютерам. Но теперь надо воссоздать их, опираясь уже на смартфоны. Сам код примеров останется практически неизменным. Но при этом изменится логика управления программой. Как уже говорилось ранее, управление в смартфонах сводится к обработке событий для пунктов меню.

Встречи

Сначала рассмотрим пример с использованием объекта Pocket Outlook. На этот раз надо получить доступ к списку встреч (Appointment). Перед началом изучения примера вам нужно убедиться, что список событий имеет хотя бы одну запись. Если там ничего нет, то следует создать несколько записей самостоятельно.

После создания нового проекта на форме надо разместить элемент

ListView
. Свойство
View
должно получить значение
Details
. В коллекции
Columns
надо задать заголовки
Дата
,
Время
и
Тема
(рис. 10.12). Прежде всего потребуется задать переменную для экземпляра сессии Outlook. Сразу же после вызова метода
InitializeComponent
в конструкторе формы объявляем экземпляр для сессии
PocketOutlook
, как показано в листинге 10.19.

Рис. 10.12. Внешний вид приложения

Листинг 10.19

private OutlookSession session;

public Form1() {

 InitializeComponent();

 // Создаем экземпляр сессии Pocket Outlook

 session = new OutlookSession();

}

Теперь программист получил доступ к коллекции событий через объект

OutlookSession
. Для коллекции
Appointment
создается соответствующая переменная, при помощи которой можно получить каждый элемент коллекции, что иллюстрирует код, приведенный в листинге 10.20.

Листинг 10.20

private void menuAppointments_Click(object sender, EventArgs e) {

 AppAppts = session.Appointments.Items;

 // Проходим через все элементы коллекции

 foreach (Appointment appt in AppAppts) {

  // Создаем объект ListViewItem

  lvItems = new ListViewItem();

  // Разделяем полученные результаты по колонкам

  lvItems.Text = appt.Start.ToShortDateString();

  lvItems.SubItems.Add(appt.Start.ToShortTimeString());

  lvItems.SubItems.Add(appt.Subject);

  // Добавляем в ListView

  lvContacts.Items.Add(lvItems);

 }

 // He забываем закрыть сессию PocketOutlook

 session.Dispose();

}

Также мы можем получить информацию об имеющихся контактах. Но в этом случае рассматривать код не нужно, так как он полностью повторяет пример для КПК.

Отсылка письма

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

В этом примере будет применен другой подход к дизайну программы. Так как средства навигации в смартфоне довольно скудны, желательно сводить к минимуму число нажатий на клавиши. Например, одна и та же клавиша может запускать разные функции.

После создания нового проекта

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

Также потребуется изменить код из предыдущего примера. Нужно переместить код из обработчика события

menuSoftKey1_Click
в отдельный метод
SelectContact()
. Это делается для того, чтобы можно было более гибко настраивать программу под свои нужды. Соответствующий код приведен в листинге 10.21.

Листинг 10.21

private void SelectContact() {

 // Создаем экземпляр окна выбора контактов

 ChooseContactDialog contactDial = new ChooseContactDialog();

 // а также убираем возможность создания новых контактов

 contactDial.HideNew = true;

 // выводим диалоговое окно на экран

 if (contactDial.ShowDialog() == DialogResult.OK) {

  selContact = contactDial.SelectedContact;

  txtContact.Text = selContact.FileAs;

  menuSoftKey1.Text = Послать;

 }

}

Следует обратить особое внимание на строку

menuSoftKey1.Text = "Послать";

Когда пользователь выберет пункт

Контакты
, а затем нужный контакт, то текст в пункте меню
menuSoftKey1
меняется на строчку
Послать
. Также надо добавить новый пункт меню для очистки текстовых полей. Это позволит пользователю выбрать новый контакт для отправки письма. Надо открыть файл
Form1.cs
в дизайнере формы. На правой стороне меню к уже имеющемуся пункту
Выход
следует добавить новый пункт меню
Очистить
. Созданный пункт получит имя
mnuClear
. Код для метода
mnuClear_Click
приведен в листинге 10.22.

Листинг 10.22

private void mnuClear_Click(object sender, EventArgs e) {

 txtContact.Text = string.Empty;

 menuSoftKey1.Text = "Контакты";

}

Это позволить очистить текстовое поле и в пункте меню

menuSoftKey1
отобразить строку
Контакты
.

Теперь можно писать функцию, отправляющую электронное письмо. В примере сообщение будет отправляться с вложенными файлами. Для примера можно использовать одну из картинок, входящих в состав Windows Mobile 5.0.

Для отправки письма используется класс

EmailMessage
. Чтобы использовать этот класс в нашем примере, надо сначала установить ссылку на пространство имен
System.Messaging
, выполнив команду меню
Project►Add Referenc
e. После этого можно пользоваться данным пространством имен при помощи ключевого слова
using
:

using System.Messaging;

Код метода

SendEmail()
, который будет отвечать за отправку письма, приведен в листинге 10.23.

Листинг 10.23

private void SendEmail() {

 // Создаем экземпляр класса EmailMessage

 EmailMessage message = new EmailMessage();

 // Тема письма

 message.Subject = "Поздравление";

 // Текст письма

 message.BodyText = "Поздравляю с Днем Варенья!";

 // Выбираем адресата

 Recipient client = new Recipient(selContact.Email1Address);

 message.To.Add(client);

 // добавляем в письмо вложенный файл

 Attachment image = new Attachment(@"\My Documents\My Pictures\Flower.jpg");

 message.Attachments.Add(image);

 message.Send("ActiveSync");

 txtContact.Text = string.Empty;

 menuSoftKey1.Text = "Контакты";

}

Итак, в методе

SendEmail
объявляется и создается экземпляр класса
EmailMessage
. В свойствах
Subject
и
BodyText
задаются тема и текст письма. Электронный адрес из выбранного контакта записывается в свойстве
EmailMessage.То