Проверка ввода TEdit в C++ Builder XE8

Я очень новичок в C++ Builder XE8.

Я хочу, чтобы минимальная и максимальная длина цифр, которые должны быть набраны, составляла целых шесть цифр, а также мне нужно убедиться, что вводится только цифра (0 - исключение), а не алфавитный символ, пробел, пунктуация и т. Д.

Я также хотел бы создать окно с ошибкой, если введено что-либо, кроме номера.

Я пробовал несколько комбинаций кодов, три из которых можно увидеть ниже, но ни один из этих кодов не работает.

Любая помощь обязательно будет оценена!

(1).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if (!((int)Key == 1-9)) {
  ShowMessage("Please enter numerals only");
  Key = 0;
  }
}

(2).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if (Key <1 && Key >9) {
  ShowMessage("Please enter numerals only");
  Key = 0;
  }
}

(3).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if( Key == VK_BACK )
   return;

  if( (Key >= 1) && (Key <= 9) )
   {
  if(Edit1->Text.Pos(1-9) != 1 )
   ShowMessage("Please enter numerals only");
   Key = 1;
  return;
  }
}

2 ответа

Решение

TEdit имеет NumbersOnly имущество:

Позволяет вводить только цифры в текстовом редакторе.

Установите для него значение true и позвольте ОС обработать проверку для вас. Но, если вы хотите проверить это вручную, используйте это:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
    // set this at design-time, or at least
    // in the Form's constructor. It does not
    // belong here...
    //Edit1->MaxLength = 6;

    if( Key == VK_BACK )
        return;

    if( (Key < L'0') || (Key > L'9') )
    {
        ShowMessage("Please enter numerals only");
        Key = 0;
    }
}

Проверять, выписываться TMaskEdit: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/idh_useop_textcontrols_xml.html

TMaskEdit - это специальный элемент управления для редактирования, который проверяет введенный текст по маске, кодирующей действительные формы, которые может принимать текст. Маска также может форматировать текст, отображаемый для пользователя.

РЕДАКТИРОВАТЬ: установить минимальную длину

void __fastcall TForm1::MaskEdit1Exit(TObject *Sender)
{
   if (MaskEdit1->Text.length() < 6)
   {
     //your error message, or throw an exception.
   }
}
Другие вопросы по тегам