Satiata
@Satiata

Замена и запрет символов в TextBox?

Есть текстбокс, в который я могу ввести только цифры и запятую. Т.к. запятая нужна в качестве разделителя - она может писаться только раз.
Соответственно, если вводится точка - ее надо заменить на запятую. Получился такой код:

private: System::Void aPredelText_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

			 if ((e->KeyChar >= '0')&&(e->KeyChar <= '9')) 
			 {
				 return;
			 }

			 if (e->KeyChar == '.')
			 {
				 e->KeyChar = ',';
			 }
			 
			 if (e->KeyChar == ',')
			 {
				 if (aPredelText->Text->IndexOf(',') != -1) {
					 e->Handled = true;
				 }
				 return;
			 }
			 if (Char::IsControl(e->KeyChar))
			 {
				 if (e->KeyChar == (char) Keys::Enter)
					 otvetButton->Focus();
				 return;
			 }
			 e->Handled = true;
}


Компиляция проходит без ошибок, но в итоге ничего не меняется, все так же можно вводить любые символы и точка не меняется. Как можно решить эту проблему?
  • Вопрос задан
  • 8219 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
private: System::Void aPredelText_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
{
	// точка или запятая
	if(e->KeyChar == '.' || e->KeyChar == ',')
	{
		// жесткая запятая
		e->KeyChar = ','; 
		// может уже имеем один разделитель
		if (aPredelText->Text->IndexOf(',') != -1) 
		{
			e->Handled = true;
			return;
		}
	}

	// не управляющая клавиша, не число и не разделитель
	if(!Char::IsControl(e->KeyChar) && !Char::IsDigit(e->KeyChar) && e->KeyChar != ',')
	{
		e->Handled = true;
		return;
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы