Из часто используемых свойств элемента ListBox в полной версии NET Framework можно выделить свойство MultiColumn, которое не поддерживается в .NET Compact Framework. В нем отсутствует горизонтальная полоска прокрутки, даже если строки текста не умещаются в списке полностью. Также не поддерживается многострочное выделение, поэтому пользователь может выбрать только один элемент списка.
Элемент 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.
Листинг 3.7
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 позволяет создавать счетчик с текстовым полем ввода. Этот элемент похож на элемент NumericUpDown, а его функциональность схожа с теми возможностями, которые предоставляют ComboBox или ListBox. Но в элементе DomainUpDown вместо чисел используются строки. Этот элемент очень широко применяется для построения интерфейса, так как он весьма компактен и не занимает много места на маленьком экране карманного компьютера. Следует учитывать, что пользователь не может увидеть весь список. Если свойство ReadOnly имеет значение True, то пользователь может выбирать только заранее заданные строки из списка. Если это свойство имеет значение False, то пользователь сможет добавить свой текст в поле ввода. Впрочем, напечатанный текст все равно не войдет в список.
Так же как и элемент NumericUpDown, данный элемент управления содержит текстовое поле и две кнопки со стрелками с правой стороны. Пользователь может использовать эти стрелки для прокрутки списка строк или ввести в поле свой текст, если свойство ReadOnly имеет значение False.
При создании объекта свойство SelectedIndex имеет значение -1, показывающее, что ни один элемент списка пока еще не выбран. Если нужно выделить тот или иной пункт списка при загрузке элемента, то в свойстве SelectedIndex нужно указать соответствующий порядковый номер. В листинге 3.8 приведен пример, иллюстрирующий программное добавление строк в список и методику обработки события SelectedItemChanged.
Листинг 3.8
private void Form1_Load(object sender, System.EventArgs e) {
domainUpDown1.Items.Add("Item 1");
domainUpDown1.Items.Add("Item 2");
domainUpDown1.Items.Add("Item 3");
domainUpDown1.Items.Add("Item 4");
domainUpDown1.ReadOnly = true;
}
private void domainUpDown1_SelectedItemChanged(object sender,
System.EventArgs e) {
label1.Text = domainUpDown1.SelectedIndex.ToString();
label2.Text = domainUpDown1.Items[domainUpDown1.SelectedIndex].ToString();
}
Элемент управления ProgressBar предназначен для индикации процесса выполнения какой-либо операции. Как правило, данный элемент активно используется при выполнении долгих операций, чтобы пользователь получил иллюзию контроля над работой приложения.
Чаще всего разработчик оперирует свойствами Minimum, Maximum и Value. Свойства Minimum и Maximum задают минимальное и максимальное значения свойства Value. А свойство Value определяет текущее значение индикатора.
Как правило, данный элемент отображается в момент начала долгой операции, а после ее завершения делается невидимым с помощью метода Hide или свойства Visible.
Для демонстрации работы индикатора прогресса было создано приложение, которое позволит отследить время варки яиц вкрутую. Предположим, что для варки достаточно трех минут. Нужно положить яйца в воду и запустить таймер. По истечении трех минут приложение должно отобразить соответствующее сообщение. Основной код приложения приведен в листинге 3.9.
Листинг 3.9
private void tmrCook_Tick(object sender, EventArgs e) {
if (this.progressBar1.Value < this.progressBar1.Maximum) {
this.progressBar1.Value += 1;
lblCounter.Text = this.progressBar1.Value.ToString();
}
if (this.progressBar1.Value >= this.progressBar1.Maximum) {
tmrCook.Enabled = false;
MessageBox.Show("Яйца сварились!");
this.progressBar1.Value = 0;
lblCounter.Text = "0";
}
}
private void butStart_Click(object sender, EventArgs e) {
tmrCook.Enabled = true;
}
На рис. 3.6 показан внешний вид приложения в момент отсчета времени.
Рис. 3.6. Индикатор прогресса, позволяющий сварить яйца вкрутую
Строка состояния выглядит как небольшая полоска в нижней части приложения, в которой отображается текстовая информация для пользователя. Этот элемент интерфейса реализуется при помощи элемента StatusBar. Чтобы изменить текст в элементе StatusBar, достаточно присвоить новое значение свойству Text. На рис. 3.7 показан внешний вид приложения в тот момент, когда пользователь нажимает на кнопку, а в листинге 3.10 приведен пример кода, который меняет текст в строке состояния.
Рис. 3.7. Пример работы со строкой состояния
Листинг 3.10
private void butClickMe_Click(object sender, EventArgs e) {
this.statusBar1.Text = "Вы нажали на кнопку";
}
Строка состояния поддерживает только одну информационную панель, а также не распознает события Click.
Элемент управления TrackBar предназначен для установки числового значения при помощи перемещения ползунка по числовой шкале. Основную работу с элементом разработчик выполняет при помощи свойств Minimum, Maximum и Value. Ползунок может располагаться как вертикально, так и горизонтально. Ориентация ползунка задается при помощи свойства Orientation. Свойство TickFrequency регулирует дистанцию между метками шкалы. По умолчанию значение свойства TickFrequency равно единице.