Zabezpieczenie Edit'a przed wpisywaniem liter

Zabezpieczenie Edit'a przed wpisywaniem liter
DC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
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.

Kopiuj
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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
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ć:

Kopiuj
Edit1->Text=IntToStr(Edit1->Text.ToInt());
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.