□ NotifyIcon;
□ элементы управления, связанные с печатью;
□ RichTextBox;
□ Splitter (поддерживается в .NET Compact Framework 2.0).
В Compact .NET Framework 2.0 были добавлены новые элементы управления, которые перечислены в следующем списке.
□ MonthCalendar — месячный календарь, позволяющий в наглядном виде выбрать необходимую дату.
□ DateTimePicker — элемент для выбора даты и времени. Он достаточно компактен, что позволяет широко использовать его в приложениях.
□ WebBrowser — элемент, который реализует функциональность браузера.
□ Notification — элемент, с помощью которого приложение может посылать пользователю различные уведомления без остановки текущей запущенной программы. Уведомления могут отображаться как обычным текстом, так и в формате HTML.
□ DocumentList — элемент управления, обеспечивающий стандартный механизм для управления файлами. Пример работы данного элемента можно увидеть при открытии файлов в приложениях Excel Mobile и Word Mobile. Элемент DocumentList позволяет перемещаться по файловой системе и выполнять стандартные файловые операции.
□ DataGrid — элемент для отображения данных в табличном виде. Теперь может использоваться и в приложениях для смартфонов.
□ LinkLabel — элемент управления для создания гипертекстовых ссылок.
□ Splitter — элемент управления, позволяющий изменять размеры других элементов.
□ HardwareButton — элемент управления, позволяющий управлять кнопками карманного компьютера.
Урезанная функциональность элементов управления
Кроме отсутствия некоторых элементов управления, в .NET Compact Framework также была урезана функциональность имеющихся элементов. Наиболее часто употребляемые элементы управления с урезанной функциональностью приведены в следующем списке:
□ AcceptButton;
□ CancelButton;
□ AutoScroll (поддерживается в .NET Compact Framework 2.0);
□ Anchor (поддерживается в .NET Compact Framework 2.0);
□ элементы Multiple Document Interface (MDI);
□ KeyPreview (поддерживается в .NET Compact Framework 2.0);
□ TabIndex (поддерживается в .NET Compact Framework 2.0);
□ TabStop (поддерживается в .NET Compact Framework 2.0).
Также наложены ограничения на технологию drag and drop и на поддержку графики. Во многих классах поддерживаются не все свойства, события и методы.
Однако в .NET Compact Framework 2.0 ограничений стало меньше. Например, элементы управления теперь обладают свойствами TabIndex и TabStop.
Элемент Form является контейнером для элементов управления и является рабочей площадкой для создания пользовательского интерфейса программы. Класс Form имеет несколько свойств, которые могут различаться в зависимости от выбранной целевой платформы.
Свойство FormBorderStyle определяет стиль формы. По умолчанию используется стиль FormBorderStyle.FixedSingle. При этом форма заполняет все рабочее место экрана, и пользователь не может изменять размеры формы или перемещать ее по экрану. При установке значения FormBorderStyle.None создается форма без рамки и заголовка. В этом случае можно изменять размеры и расположение формы программно, но пользователь по-прежнему не может манипулировать формой.
Свойство ControlBox отвечает за отображение контейнера для элемента управления. Если свойство ControlBox имеет значение True, то контейнер будет отображаться. В противном случае он на экран не выводится. Для устройств Pocket PC подобный контейнер может содержать только одну кнопку.
Свойства MinimizeBox и MaximizeBox
В приложениях для Pocket PC форма может содержать только одну кнопку. Она отвечает либо за минимизацию формы, либо за ее закрытие. Разработчик может управлять внешним видом кнопки при помощи свойства MinimizeBox. Если оно имеет значение True, то кнопка при нажатии будет сворачивать форму. Значение False позволяет создавать кнопку закрытия формы. Значение свойства MaximizeBox игнорируется системой.
Свойство WindowsState определяет состояние окна при первоначальной загрузке. Разработчик может использовать значения FormWindowState.Normal и FormWindowState.Maximized. Если свойство имеет значение FormWindowState.Normal, то форма заполняет весь экран, за исключением нижней полоски меню и верхней полоски системного меню Start (Пуск). При использовании значения FormWindowState.Maximized форма заполняет экран полностью, скрывая системное меню Start (Пуск), но при этом нижняя полоса меню остается видимой.
Размеры и расположение формы
Свойство Size позволяет задавать размеры формы. Это свойство игнорируется, если свойство FormBorderStyle имеет значение FixedSingleProperty.
Свойство Location задает координаты верхнего левого угла формы. Но так как форма обычно заполняет весь экран, то в большинстве случаев это свойство не используется.
В этом разделе будут рассмотрены основные элементы управления, которые используются для формирования пользовательского интерфейса. Особое внимание будет уделено различиям и особенностям поведения этих элементов.
Для создания обычной кнопки используется класс System.Windows.Forms.Button. Эта кнопка обладает всеми основными функциями, которые есть у такого же класса в полной версии .NET Framework. Кнопка предназначена для обработки нажатия стилуса на соответствующую область экрана. В этом случае возникает событие Click. Код, приведенный в листинге 3.1, является обработчиком этого события. Он выводит текущее время в текстовое поле после нажатия на кнопку с надписью Узнать время.
Листинг 3.1
private void butGetTime_Click(object sender, EventArgs e) {
txtCurTime.Text = DateTime.Now.ToLongTimeString();
}
Рисунок 3.3 показывает приложение в момент нажатия на кнопку.
Рис. 3.3. Результат нажатия на кнопку
Текст на кнопке может быть только однострочным. Если он не помещается на кнопке, то будет обрезан. Поэтому нужно быть очень осторожным при выборе текста для кнопки. В следующей главе, посвященной улучшениям элементов управления, приведен пример создания кнопки с многострочным текстом, которая создается при помощи неуправляемого кода с использованием функций Windows API.
Функциональность элемента управления Button очень сильно урезана по сравнению с полной версией .NET Framework. В частности, у данного элемента нет свойств Image и ImageList, которые применяются для отображения на кнопке графики.
В предыдущем примере дата отображалась в текстовом поле. Это поле создается при помощи класса TextBox, который позволяет вводить текст. Данный элемент поддерживает такие стандартные свойства, как BackColor и ForeColor. Событие Click элементом TextBox не поддерживается, но разработчик может воспользоваться событиями KeyPress, KeyUp и KeyDown. Следует отметить особенность этого элемента. Несмотря на то что класс TextBox поддерживает свойство PasswordChar, при вводе пароля на экране всегда будет использоваться символ звездочки. Задать другой символ не получится.
Также текстовое поле не поддерживает свойство CharacterCasing, позволяющее в автоматическом режиме преобразовывать символы текста в нужный регистр. Впрочем, данный недостаток легко исправить, что иллюстрирует фрагмент кода, приведенный в листинге 3.2.
Листинг 3.2
private void txtCurTime_KeyPress(object sender, KeyPressEventArgs e) {
if (Char.IsLetter(e.KeyChar)) {
// сохраняем текущую позицию каретки
int pos = txtCurTime.SelectionStart;
// переводим в верхний регистр
txtCurTime.Text =
txtCurTime.Text.Insert(txtCurTime.SelectionStart,
Char.ToUpper(e.KeyChar).ToString());
// перемещаем каретку в новую позицию
txtCurTime.SelectionStart = pos + 1;
e.Handled = true;
}
}
ПРИМЕЧАНИЕ
У смартфонов внешний вид текстовых полей несколько отличается от стандартного вида. В частности, текстовое поле не имеет окантовки. Более подробно о текстовых полях в приложениях для смартфонов рассказывается в соответствующей главе.
В рассмотренном примере также использовался элемент Label для отображения текстовой строки. Как правило, надпись используется для отображения некоторого текста, который пользователь не может изменить. Сама отображаемая строка задается при помощи свойства Text. Текст на экране можно выравнивать с помощью свойства TextAlign. Разработчик может использовать значения TopLeft, TopCenter и TopRight. При изменении текста в метке инициируется событие TextChanged. При создании элемента нужно следить за длиной отображаемой строки. Если текст слишком большой и не помещается в пределах элемента, то он попросту обрезается.