2

私は C++ Builder XE8 を初めて使用します。

入力する必要がある数字の最小長と最大長を 6 桁までにしたいのですが、アルファベット文字、バックスペース、句読点などではなく、数字のみを入力する必要があります (0 は例外です)。

また、数字以外が入力された場合にエラーボックスを生成したいと考えています。

コードの組み合わせをいくつか試してみましたが、そのうちの 3 つを以下に示しますが、どれも機能しません。

どんな助けでも大歓迎です!

(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;
  }
}
4

2 に答える 2

2

TEditプロパティがありNumbersOnlyます:

テキスト編集に入力できるのは数字のみです。

true に設定し、OS に検証を処理させます。ただし、手動で検証する場合は、次を使用します。

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;
    }
}
于 2015-08-04T03:49:13.570 に答える
1

チェックアウト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.
   }
}
于 2015-08-04T03:48:40.767 に答える