На этом шаге мы рассмотрим этот компонент.
Компонент TextBox (рисунок 1) предназначен для ввода данных с клавиатуры.
Рис.1. Компонент TextBox
В зависимости от настройки компонента, в поле редактирования можно ввести одну или несколько строк текста. Свойства компонента приведены в таблице 1.
Свойство | Описание |
---|---|
Name | Имя компонента. Используется в программе для доступа к компоненту и его свойствам, в том числе к тексту, который находится в поле редактирования |
Text | Текст, который находится в поле редактирования |
Location | Положение компонента на поверхности формы |
Size | Размер компонента |
Font | Шрифт, используемый для отображения текста в поле компонента |
ForeColor | Цвет текста, находящегося в поле компонента |
BackColor | Цвет фона поля компонента |
BorderStyle | Вид рамки (границы) компонента. Граница компонента может быть обычной (Fixed3D), тонкой (FixedSingle). Граница вокруг компонента может отсутствовать (в этом случае значение свойства равно None) |
TextAlign | Способ выравнивания текста в поле компонента. Текст в поле компонента может быть прижат к левой границе компонента (Left), правой (Right) или находиться по центру (Center) |
MaxLength | Максимальное количество символов, которое можно ввести в поле компонента |
PasswordChar | Символ, который используется для отображения вводимых пользователем символов (введенная пользователем строка находится в свойстве Text) |
Multiline | Разрешает (True) или запрещает (False) ввод нескольких строк текста |
Dock | Способ привязки положения и размера компонента к размеру формы. По умолчанию привязка отсутствует (None). Если значение свойства равно Top или Bottom, то ширина компонента устанавливается равной ширине формы и компонент прижимается соответственно к верхней или нижней границе формы. Если значение свойства Dock равно Fill, а свойства Multiline - True, то размер компонента устанавливается максимально возможным |
Lines | Массив строк, элементы которого содержат текст, находящийся в поле редактирования, если компонент находится в режиме Multiline. Доступ к строке осуществляется по номеру. Строки нумеруются с нуля |
SkroolBars | Задает отображаемые полосы прокрутки: Horizontal - горизонтальная; Vertical - вертикальная; Both - горизонтальная и вертикальная; None - не отображать |
Если не предпринимать никаких усилий, то в поле компонента TexBox отображаются все символы, которые пользователь набирает на клавиатуре, что не всегда удобно. Программа может обеспечить фильтрацию вводимых символов путем запрета отображения запрещенных символов. Для того чтобы символ не отображался в поле редактирования, в процедуре обработки события KeyPress параметру Handled надо присвоить значение True.
Представленная далее программа (форма приведена на рисунке 2, а текст — в листинге ниже) демонстрирует использование компонента TextBox для ввода данных различного типа. Программа спроектирована таким образом, что в режиме ввода текста в поле редактирования можно ввести любой символ, в режиме ввода целого числа — только цифры. В режиме ввода дробного числа кроме цифр в поле компонента можно ввести символ-разделитель (запятую или точку, в зависимости от настройки операционной системы).
Следует обратить внимание, что в директиву uses надо поместить ссылку на пространство имен System.Globalization.
Рис.2. Форма программы TextBox
Размещение ссылки и обработка события KeyPress компонентов TextBox
using namespace System::Globalization; . . . . . private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { if (Char::IsControl(e->KeyChar)) { if (e->KeyChar == (char)Keys::Enter) { // Нажата клавиша <Enter>. // Переместить фокус в поле textBox2 textBox2->Focus(); } } } private: System::Void textBox2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { // в textBox2 можно ввести только целое число if ((e->KeyChar >= '0') && (e->KeyChar <= '9')) // цифра return; if (Char::IsControl(e->KeyChar)) { if (e->KeyChar == (char)Keys::Enter) { // Нажата клавиша <Enter>. // Переместить фокус в поле textBox3 textBox3->Focus(); } return; } // остальные символы запрещены e->Handled = true; } private: System::Void textBox3_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { // CultureInfo::CurrentCulture->NumberFormat-> // NumberDecimalSeparator - строка. // Нам нужен первый символ char aDecimalSeparator = CultureInfo::CurrentCulture->NumberFormat->NumberDecimalSeparator[0]; if ((e->KeyChar >= '0') && (e->KeyChar <= '9')) // цифра return; // Заменим введенный пользователем десятичный разделитель // (точку или запятую) на "правильный" - // CultureInfo::CurrentCulture->NumberFormat->NumberDecimalSeparator // CultureInfo::CurrentCulture->NumberFormat->NumberDecimalSeparator - строка. // Нам нужен первый символ if ((e->KeyChar == '.') || (e->KeyChar == ',')) e->KeyChar = aDecimalSeparator; if (e->KeyChar == aDecimalSeparator) { // Нажата запятая. Проверим, // может, запятая уже есть в поле редактирования if ((textBox3->Text->IndexOf(aDecimalSeparator) != -1) || (textBox3->Text->Length == 0)) { // Запятая уже есть. // Запретить ввод еще одной e->Handled = true; } return; } if (Char::IsControl(e->KeyChar)) { if (e->KeyChar == (char)Keys::Enter) { // Нажата клавиша <Enter>. // Переместить курсор в поле textBox1 textBox1->Focus(); } return; } // остальные символы запрещены e->Handled = true; }
На следующем шаге мы рассмотрим компонент Button.