Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
ColumnHeader columnHeader3 = new ColumnHeader();
columnHeader1.Text = "Фамилия";
columnHeader2.Text = "Имя";
columnHeader3.Text = "E-mail";
listView1.Columns.Add(columnHeader1);
listView1.Columns.Add(columnHeader2);
listView1.Columns.Add(columnHeader3);
ListViewItem Contact1 = new ListViewItem("Иванов");
Contact1.SubItems.Add("Иван");
Contact1.SubItems.Add("[email protected]");
ListViewItem Contact2 = new ListViewItem("Петров");
Contact2.SubItems.Add("Петр");
Contact2.SubItems.Add("[email protected]");
ListViewItem Contact3 = new ListViewItem("Сидоров");
Contact3.SubItems.Add("Арнольд");
Contact3.SubItems.Add("[email protected]");
listView1.Items.Add(Contact1);
listView1.Items.Add(Contact2);
listView1.Items.Add(Contact3);
}
На рис. 3.12 показан внешний вид приложения со списком в виде таблицы.
Рис. 3.12. Пример работы с элементом ListView
В полной версии .NET Framework элемент управления ListView поддерживает свойство MultiSelect, позволяющее одновременно выбрать несколько элементов из списка. Версия .NET Compact Framework не поддерживает данное свойство, поэтому пользователь может выбрать только один элемент.
Элемент TabControl
Элемент управления TabControl очень удобен при создании интерфейсов для устройств с малыми размерами экрана, так как он позволяет создавать многостраничные диалоговые окна. Вкладки, реализуемые этим элементом, имеют ярлычки, на которых отображаются заголовки страниц. И пользователь может легко переключаться между страничками, просто щелкая по этим ярлычкам.
В устройствах Pocket PC вкладки располагаются в нижней части окна. Следует обратить внимание на то, что элемент TabControl всегда располагается в верхнем левом углу контейнера. Например, если поместить TabControl на форму, то он появится в ее верхнем левом углу. Если же нужно изменить расположение этого элемента, то надо поместить его на панель, которая является контейнером. При перемещении панели будет перемещаться и TabControl.
Элемент TabControl следует расположить на форме. У него по умолчанию будут созданы вкладки tabPage1 и tabPage2. Если нужно добавить новую вкладку, то следует щелкнуть на маленькой стрелке в верхней части элемента TabControl и выбрать пункт меню Add Tab (рис. 3.13).
Рис. 3.13. Добавление новой закладки в элементе TabControl
В результате у элемента TabControl появится новая закладка, которую можно настроить в соответствии с потребностями разработчика. Также программист может воспользоваться услугами редактора TabPage Collection Editor для добавления новых закладок. В этом случае надо выбрать элемент TabControl в дизайнере формы, найти свойство TabPages и нажать кнопку редактирования этого свойства. В результате будет открыт редактор закладок. Для управления закладками можно также выделить TabControl, щелкнуть на нем правой кнопкой мыши и выбрать пункты контекстного меню Add Tab или Remove Tab.
Для определения текущей вкладки используется свойство SelectedIndex. При изменении данного свойства инициируется событие SelectedIndexChanged, что иллюстрирует код, приведенный в листинге 3.22.
Листинг 3.22private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) {
switch (this.tabControl1.SelectedIndex) {
case 0:
MessageBox.Show("Вы выбрали первую вкладку");
break;
case 1:
MessageBox.Show("Вы выбрали вторую вкладку");
break;
case 2:
MessageBox.Show("Вы выбрали третью вкладку");
break;
}
}
Элемент TreeView
Элемент управления TreeView позволяет представить данные в иерархическом виде. Именно в этом виде отображается структура дисковой системы в левой части рабочего окна программы Проводник Windows. Основой элемента TreeView являются объекты TreeNode и Nodes. При работе с TreeView также широко используется элемент управления ImageList, используемый как хранилище изображений для узлов.
Заполнять древовидную структуру можно как на этапе конструирования формы, так и во время выполнения программы. Для создания дерева в дизайнере формы нужно переместить на нее элемент TreeView. Затем следует выбрать свойство Nodes и запустить редактор TreeNode Editor. Кнопка Add Root отвечает за создание узлов дерева. Кнопка Add Child позволяет добавить дочерний узел к выбранному узлу. Кнопка Delete удаляет выбранный узел.
Чтобы задать текст, отображаемый в узлах, можно использовать свойство Text. Также в узлах можно использовать изображения, для чего применяется комбинация элемента управления ImageList и свойства SelectedImageList. Для определения текущего узла используется свойство SelectedNode.
На рис. 3.14 показан внешний вид приложения, использующего элемент интерфейса TreeView.
Рис. 3.14. Использование элемента TreeView
Элемент InputPanel
Элемент управления InputPanel позволяет вводить текстовую информацию при помощи виртуальной клавиатуры или панели распознавания знаков SIP (Soft Input Panel). Так как в полной версии .NET Framework данного элемента нет, то стоит рассмотреть его несколько подробнее.
Как правило, в карманных компьютерах нет клавиатуры, поэтому для ввода данных используется виртуальная клавиатура. В обычном состоянии она неактивна и находится в свернутом состоянии. Чтобы ее активировать, нужно щелкнуть стилусом по значку клавиатуры в нижнем правом углу экрана, где располагается меню или панель инструментов ToolBar. Тогда виртуальная клавиатура появится на экране, и пользователь сможет вводить текст.
Разработчик может программно управлять состоянием клавиатуры. Например, с помощью элемента InputPanel можно узнать текущее состояние SIP, возможность ее отображения и деактивации. Свойств и методов у элемента InputPanel не так уж много, но наиболее часто используемые члены класса приведены в следующем списке.
□ Bounds — прямоугольник, определяющий размеры и позицию SIP.
□ VisibleDesktop — прямоугольная часть экрана, на которой не отображается SIP.
□ Enabled — возможность работы с SIP.
□ EnabledChanged — событие, возникающее при изменении состояния SIP.
Свойства Bounds и VisibleDesktop доступны только для чтения и определяют прямоугольники, по которым можно судить о положении SIP и размерах клиентской области, не занятой SIP. Свойство VisibleDesktop определяет прямоугольник, которым ограничена область экрана, не закрытая SIP. Когда виртуальная клавиатура отображается, то условный прямоугольник поднимается от полоски навигации над окном SIP. Когда SIP скрыт, то прямоугольник занимает все пространство экрана.
Свойство Bounds описывает размеры и позицию виртуальной клавиатуры, когда она отображается на экране. Причем размеры этого прямоугольника не меняются, даже если виртуальная клавиатура скрыта.
Свойство Enabled имеет значение True, если виртуальная клавиатура отображается на экране. Значение свойства можно задавать программно, скрывая или отображая клавиатуру.
Если в приложении необходимо использовать элемент InputPanel, нужно следить, чтобы он при активации не загородил элементы управления на форме, иначе пользователь просто не сможет ввести данные.
Можно размещать текстовые поля на форме как можно выше, чтобы элемент InputPanel не мешал вводить данные. Но помимо этого можно отслеживать состояние виртуальной клавиатуры и при ее отображении передвигать вверх поля для ввода информации. В этом случае чаще всего приходится применять полосы прокрутки. Можно проиллюстрировать такое поведение примером, в котором элемент InputPanel будет активироваться, если текстовое поле получит фокус. А когда TextBox потеряет фокус, то клавиатура должна исчезнуть. Эта функциональность реализуется кодом, приведенным в листинге 3.23.
Листинг 3.23private void txtTest_GotFocus(object sender, EventArgs e) {
// Когда пользователь выбирает текстовое поле.
// то автоматически активируем SIP
inputPanel1.Enabled = true;
}
private void txtTest_LostFocus(object sender, EventArgs e) {
// При потере фокуса сворачиваем SIP
inputPanel1.Enabled = false;
}
В этом примере пришлось добавить на форму кнопку, иначе текстовое поле будет автоматически получать фокус при загрузке формы и приложение не будет работать так, как это задумывалось изначально. В данном случае именно кнопка будет получать фокус ввода при загрузке формы. Но для этого надо присвоить свойству кнопки TabIndex нулевое значение.