Внешний вид и поведение элемента ComboBox в смартфонах немного отличается от аналогичных элементов в КПК. Более подробно об отличиях будет рассказано в соответствующей главе.
Элемент ListBox
Элемент ComboBox
хорош для приложений с ограниченными пространствами формы, а список ListBox
можно использовать, если на экране достаточно места для отображения всех пунктов списка. Список ListBox
сразу показывает все имеющиеся элементы списка, при необходимости добавляя вертикальную полоску прокрутки, если все элементы списка не могут быть отображены одновременно.
Элементы ComboBox
и ListBox
имеют почти одинаковый набор свойств и методов. В листинге 3.6 показано, как можно программно добавить несколько строк в список ListBox
.
lstFruit.Items.Add("Яблоко");
lstFruit.Items.Add("Груша");
lstFruit.Items.Add("Слива");
lstFruit.Items.Add("Персик");
Свойство SelectedIndex
содержит порядковый номер выбранного элемента списка. Если указать этот индекс в коде приложения, то выбранный элемент будет немедленно выделен в списке соответствующим цветом. Если никакой элемент не выбран, то свойство SelectedIndex
имеет значение -1. Также класс поддерживает свойство SelectedItem
, которое соответствует одноименному свойству класса ComboBox
.
Из часто используемых свойств элемента ListBox
в полной версии NET Framework можно выделить свойство MultiColumn
, которое не поддерживается в .NET Compact Framework. В нем отсутствует горизонтальная полоска прокрутки, даже если строки текста не умещаются в списке полностью. Также не поддерживается многострочное выделение, поэтому пользователь может выбрать только один элемент списка.
Элемент NumericUpDown
Элемент NumericUpDown
позволяет создавать счетчик с числовым полем ввода. Такой элемент интерфейса помогает пользователю быстро выбрать число из заданного диапазона. Элемент может работать только с целыми числа типа Integer
. Десятичные значения округляются.
Разработчик управляет поведением элемента NumericUpDown
при помощи свойств Minimum
, Maximum
, Value
и Increment
. Свойства Minimum
и Maximum
определяют максимальное и минимальное значения элемента. Свойство Value
содержит текущее значение в поле ввода. Свойство Increment
определяет величину увеличения или уменьшения значения в поле, когда пользователь нажимает кнопки со стрелками. Текущее значение всегда увеличивается и уменьшается на значение свойства Increment
, даже если результат выходит за диапазон, определенный свойствами Minimum
и Maximum
.
Пользователь также может изменить свойство Value
, просто указав соответствующее значение в поле. Если это значение находится в интервале между Minimum
и Maximum
, тогда свойства Value
и Text
изменятся в соответствии с введенным значением. Если новое значение выходит за рамки заданных значений, то свойство Text
отображает введенное число, а свойство Value
принимает значение, которое приписано свойству Maximum
. Чтобы запретить пользователю указывать числа в поле ввода, нужно для свойства ReadOnly
задать значение True
.
При изменении значения элемента NumericUpDown
инициируется событие ValueChanged
. Оно возникает только в том случае, если значение меняется программно или когда пользователь нажал кнопки со стрелками. При вводе числа событие не инициируется. В листинге 3.7 продемонстрирован пример использования элемента NumericUpDown
и обработки события ValueChanged
.
private void numericUpDown1_ValueChanged(object sender, EventArgs e) {
int year = (int)this.numericUpDown1.Value;
this.lblNote.Text = "Вы выбрали " + year.ToString() + "год";
}
На рис. 3.5 показано, как функционирует элемент NumericUpDown
.
Рис. 3.5. Выбор года при помощи элемента NumericUpDown
При работе с элементом NumericUpDown
следует учитывать одну особенность его функционирования. Предположим, пользователь нажимает кнопку со стрелкой вверх, постоянно увеличивая значение счетчика на величину свойства Increment
. При достижении максимального значения, определенного в свойстве Maximum
, счетчик сохранит значение, которое не будет отображено на экране. Теперь, когда пользователь начнет уменьшать значения с помощью кнопки со стрелкой вниз, то отчет пойдет не от максимального значения, которое отображено в поле ввода, а от последнего значения перед достижением максимума.
Стоит проиллюстрировать эту ситуацию. Итак, у нас установлено текущее значение, равное 1992. Значение свойства Increment
равно 6, а максимум ограничен значением 2006. Последовательные нажатия стрелки вверх доведут значение с 1992 до 2006. Итак, максимальное значение достигнуто. Теперь надо нажать кнопку со стрелкой, направленной вниз. Казалось бы, на экране должно быть показано число 2000 (2006-6), но следует учитывать, что перед превышением максимального значения счетчик запомнил число 2004. Именно от него будет отсчитываться разница, и на экране будет отображено число 1998.
Элемент DomainUpDown
Элемент DomainUpDown
позволяет создавать счетчик с текстовым полем ввода. Этот элемент похож на элемент NumericUpDown
, а его функциональность схожа с теми возможностями, которые предоставляют ComboBox
или ListBox
. Но в элементе DomainUpDown
вместо чисел используются строки. Этот элемент очень широко применяется для построения интерфейса, так как он весьма компактен и не занимает много места на маленьком экране карманного компьютера. Следует учитывать, что пользователь не может увидеть весь список. Если свойство ReadOnly
имеет значение True
, то пользователь может выбирать только заранее заданные строки из списка. Если это свойство имеет значение False
, то пользователь сможет добавить свой текст в поле ввода. Впрочем, напечатанный текст все равно не войдет в список.
Так же как и элемент NumericUpDown
, данный элемент управления содержит текстовое поле и две кнопки со стрелками с правой стороны. Пользователь может использовать эти стрелки для прокрутки списка строк или ввести в поле свой текст, если свойство ReadOnly
имеет значение False
.
При создании объекта свойство SelectedIndex
имеет значение -1, показывающее, что ни один элемент списка пока еще не выбран. Если нужно выделить тот или иной пункт списка при загрузке элемента, то в свойстве SelectedIndex
нужно указать соответствующий порядковый номер. В листинге 3.8 приведен пример, иллюстрирующий программное добавление строк в список и методику обработки события SelectedItemChanged
.
private void Form1_Load(object sender, System.EventArgs e) {
domainUpDown1.Items.Add("Item 1");