Базовые компоненты. Компонент TextBox

   
На этом шаге мы рассмотрим этот компонент.

   
Компонент TextBox (рисунок 1) предназначен для ввода данных с клавиатуры.


Рис.1. Компонент TextBox

   
В зависимости от настройки компонента, в поле редактирования можно ввести одну или несколько строк текста. Свойства компонента приведены в
таблице 1.

Таблица 1. Свойства компонента TextBox

СвойствоОписание
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.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий