Zabezpieczenie Edit'a przed wpisywaniem liter

0

Witam, przejrzałem trochę sieć i wszyscy mnożą się w sposobach zabeczania Edita, ale są to jakieś kosmiczne sposoby, zeby nie wprowadzać po prostu danych klawiszy itp. Wyszukałem takie coś i naprawdę mi to pasuję bo jest mega prostym rozwiązaniem.

if(Edit1->Text.ToIntDef(0))

Lecz warunek ten automatycznie przypisuje temu co wpisze wartość 0 co prowadzi do tego że program wyświetla inny warunekz mojego programu, a mianowicie o tym że nie można wpisywać zera. Dla innych liczb po prostu zacznie liczyć. Analogicznie rzecz biorąc jeśli zmienia 0 na 1 to ktoś po wpisaniu dowolnej litery otrzyma obliczenia dla wartości jeden. Nie ma to sensu. A więc czy ktoś mógłby mi podać jakiś prostszy warunek? Z góry dzięki

1

Borlandowy textedit powinien mieć jakąś opcję do maskowania wejścia - szybkie googlowanie ujawnia EditMask. Spraw, aby można było wstawiać wyłącznie cyfry i będzie ok.

1
void Form1::CheckValueEdit1()
  {
   static AnsiString GoodText="0";
   static int GoodSelStart=0,GoodSelLength=1;
   try
     {
      Edit1->Text.ToInt();
      GoodText=Edit1->Text;
      GoodSelStart=Edit1->SelStart;
      GoodSelLength=Edit1->SelLength;
     }
   catch(...)
     {
      Edit1->Text=GoodText;
      Edit1->SelStart=GoodSelStart;
      Edit1->SelLength=GoodSelLength;
     }
  }

Wywołaj tą metodę:

  1. W konstruktorze
  2. W Edit1OnChange
  3. W Edit1OnMouseUp
  4. W Edit1OnKeyUp

Można jeszcze w OnLeave dać:

Edit1->Text=IntToStr(Edit1->Text.ToInt());
0

jednym ze sposobów na rozwiązanie tego problemu jest coś takiego:

void TForrm1::OnEditChange(TObject *sender)
{
    TEdit *edit = static_cast<TEdit *>(sender);
    try {
        edit->tag = edit->text.ToInt();
    } catch(EConvertError *e)
    {
        edit->text = edit->tag;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1