Элементы управления Panel могут также использоваться для "консервации" содержимого экрана. Например, если у вас есть группа элементов управления, которые занимают всю нижнюю половину формы, вы можете поместить эту группу в Panel половинного размера и установить значение true (истина) для свойства AutoScroll. Тогда пользователь сможет использовать полосу (или полосы) прокрутки, чтобы просмотреть весь набор элементов. К тому же, если для свойства BorderStyle элемента Panel установить значение None, то этот тип можно будет использовать для группировки набора элементов, которые очень легко показать или скрыть способом. совершенно прозрачным в отношении конечного пользователя.
Для примера давайте добавим на вторую страницу TabControl два типа Button (с именами btnShowPanel и btnHidePanel) и один тип Panel, который содержит пару текстовых блоков (txtNormalText и txtUpperText) с инструктирующим элементом Label. (Какие именно элементы находятся в Panel, для этого примера не очень важно.) На рис. 21.19 показан окончательный вид соответствующей страницы.
С помощью окна свойств обработайте событие TextChanged для первого элемента TextBox, и в сгенерированном обработчике события поместите в txtUpperText преобразованный в верхний регистр текст, введенный в txtNormalText.
private void txtNormal'Text_TextChanged(object sender, EventArgs e) {
txtUpperText.Text = txtNormalText.Text.ToUpper();
}
Рис. 21.19. Страница Panel
Теперь обработайте событие Click для каждой кнопки. Как вы можете догадаться, нужно просто скрыть или показать Panel (вместе со всеми содержащимися там элементами пользовательского интерфейса).
private void btnShowPanel_Click(object sender, EventArgs e) {
panelTextBoxes.Visible = true;
}
private void btnHidePanel_Click(object sender, EventArgs e) {
panelTextBoxes.Visible = false;
}
Если теперь выполнить программу и щелкнуть на той или другой кнопке в соответствующем окне, вы обнаружите, что содержимое Panel соответственно показывается и скрывается. Конечно, этот пример не производит слишком большого впечатления, но я уверен, что вы смогли увидеть его возможности. Например, вы можете иметь пункт меню или окно безопасности, способные предоставить пользователю "простой" или "сложный" набор элементов. Вместо того чтобы вручную устанавливать свойство Visible равным false (ложь) для множества элементов, вы можете группировать их в пределах Panel и соответственно установить одно свойство Visible.
Элементы UpDown
В рамках Windows Forms предлагается два элемента, функционирующие, как элементы управления с прокруткой (также известные, как элементы управления UpDown). Подобно ComboBox и ListBox, эти новые элементы также позволяют пользователю выбрать элемент из некоторого диапазона возможных элементов.
Разница в том, что при использовании элемента управления DomainUpDown или NumericUpDown варианты выбираются с помощью небольших стрелок, направляющих вверх и вниз. Взгляните, например, на рис. 21.20.
Рис. 21.20. Работа с типами UpDown
С учетом того, что вы уже освоили работу с подобными типами, вы не должны встретить особых сложностей при работе с элементами UpDown. Элемент DomainUpDown дает пользователю возможность сделать выбор из набора строковых данных. Элемент NumericUpDown позволяет выбрать подходящие значений из диапазона числовых данных. Каждый из этих элементов является прямым потомком общего базового класса UpDownBase. В табл. 21.7 описаны некоторые важные свойства этого класса.
Таблица 21.7. Свойства UpDownBase
Свойство Описание InterceptArrowKeys Читает или устанавливает значение, являющееся индикатором того, что пользователю разрешено использовать стрелки вверх и вниз для выбора значений ReadOnly Читает или устанавливает значение, являющееся индикатором того, что текст разрешается менять только с помощью стрелок вверх и вниз, но не с помощью ввода в элемент управления с клавиатуры с целью поиска данной строки Text Читает или устанавливает текущий текст, отображаемый в элементе управления с прокруткой TextAlign Читает или устанавливает значение, задающее параметры выравнивания текста в элементе управления с прокруткой UpDownAlign Читает или устанавливает значение, задающее параметры выравнивания стрелок вверх и вниз в элементе управления с прокруткой, в соответствии со значениями перечня LeftRightAlignment
Элемент управления DomainUpDown добавляет небольшой набор свойств, позволяющих конфигурировать и обрабатывать текстовые данные этого элемента (табл. 21.8).
Таблица 21.8. Свойства DomainUpDown
Свойство Описание Items Позволяет получить доступ к множеству элементов, хранимых в данном элементе управления SelectedIndex Возвращает индекс выбранного в настоящий момент элемента (отсчет начинается с нуля, значение -1 указывает отсутствие выбора) SelectedItem Возвращает выбранный элемент (а не его индекс) Sorted Индикатор необходимости упорядочения строк по алфавиту Wrap Индикатор необходимости циклического возвращения к первому или последнему элементу, когда пользователь достигает крайних элементов списка
Элемент NumericUpDown так же прост (табл. 21.9).
Таблица 21.9. Свойства NumericUpDown
Свойство Описание DecimalPlaces ThousandsSeparator Hexadecimal Используются для указания правил отображения числовых данных Increment Устанавливает числовое значение приращения для элемента управления при щелчке на стрелке вверх или вниз. Значением по умолчанию для приращения является 1 Minimum Maximum Устанавливают верхнюю и нижнюю границы значений для элемента управления Value Возвращает текущее значение элемента управления
Вот та часть InitializeComponent (), которая задает конфигурацию NumericUpDown и DomainUpDown на этой странице.
private void InitializeComponent() {
…
//
// numericUpDown
//
…
this.numericUpDown.Maximum = new decimal(new int[] {5000, 0, 0, 0});
this.numericUpDown.Name = "numericUpDown";
this.numericUpDown.Thousands.Separator = true;
//
// domainUpDown
//
this.domainUpDown.Items.Add("Второй вариант");
this.domainUpDown.Items.Add("Последний вариант");
this.domainUpDown.Items.Add("Первый вариант");
this.domainUpDown.Items.Add("Третий вариант");
this.domainUpDown.Name = "domainUpDown";
this.domainUpDown.Sorted = true;
…
}
Обработчик события Click для типа Button этой страницы просто запрашивает у каждого типа его текущее значение и размещает его в рамках подходящего типа Label (с именем lblCurrSel) в виде форматированной строки, как показано ниже.
private void ntnGetSelections_Click(object sender, EventArgs e) {
// Получение информации от элементов UpDown.…
lblCurrSel.Text = string.Format("Строка: {0}nЧисло: {1}", domainUpDown.Text, numericUpDown.Value);
}
Элемент ErrorProvider
В большинстве приложений Windows Forms приходится, так или иначе, проверять правильность пользовательского ввода. Это особенно касается диалоговых окон, поскольку вы должны информировать пользователя о том, что он сделал ошибку, прежде чем пользователь продолжит ввод. Тип ErrorProvider может использоваться для того, чтобы обеспечить пользователю визуальные подсказки в отношении ошибок ввода. Предположим, например, что у вас есть форма, содержащая элементы TextBox и Button. Если пользователь введет в TextBox более пяти символов и TextBox утрачивает фокус ввода, можно отобразить информацию, показанную на рис. 21.21.
Рис. 21.21 Действие ErrorProvider
Здесь вы обнаруживаете, что пользователь ввел более пяти символов, и в ответ размещаете небольшую пиктограмму ошибки (!) рядом с объектом TextBox. Если пользователь подведет указатель мыши к этой пиктограмме, появится "всплывающий" текст с описанием ошибки. Кроме того, этот элемент ErrorProvider сконфигурирован так, чтобы заставить пиктограмму "мигать", что усилит визуальное воздействие (конечно, без запуска приложения вы этого не увидите).