Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Inhalt von Edit-label überprüfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.06.2003, 12:43 Uhr
~Katrin
Gast


Hallo,
ich habe ein Problem.

Mein Programm:
Ich habe ein Forumlar erstellt, welches aus einigen Edit-Labels und einer StringGrid- Tabelle besteht.
In die Labels und die Felder der Tabelle sollen jeweils Zahlen eingetragen werden.

Mein Problem:
Sollte der Anwender ein Zeichen das keine Zahl ist (z.B. ein Buchstabe) eingeben, möchte ich das abfangen und eine Meldung ausgeben.

Erst überprüfe ich, ob das label überhaupt einen Inhalt hat:
LabelBettenanzahl->Text.data()

Enthält das Feld einen Inhalt versuche ich den folgendermaßen auslesen:
LabelBerechnungszeitraum->Text.ToInt()

Jetzt stürzt mir, wenn z.B. ein Buchstabe eingegeben wird, das ganze Programm ab. (das passiert mir bei der Tabelle genauso)

Was mache ich falsch? Wie muss die Überprüfung richtig aussehen?

Ich wäre sehr :-))) wenn mit jemand helfen kann.

Danke,
Katrin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2003, 13:21 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Zwei Möglichkeiten, beide ungetestet (sorry):

Entweder Du setzt den StrToInt-Aufruf in einen try...catch-Block:

C++:
   try {
      Zahl = LabelBerechnungszeitraum->Text.ToInt();
   }
   catch(...) {
      // Fehler: Keine Zahl eingegeben
   }



Oder Du überprüfst schon in der OnEnter-Funktion, ob der Inhalt des Feldes gültig ist, und entfernst alles, was keine Ziffer ist:


C++:
void __fastcall TForm1::LabelBerechnungszeitraumEnter... undsoweiter
{
   AnsiString s = LabelBerechnungszeitraum->Text;
   AnsiString x = "";
   for(int i=0; i<s.Length(); i++)
      if(isdigit(s[i]))
         x += s[i];
   LabelBerechnungszeitraum->Text = x;
}



Nicht gerade sehr elegant, funktioniert aber. Dazu brauchst Du noch die <ctype.h> bei den #include's, dann klappt das!

P.S. Vorsicht mit der Bezeichnung - ein Label ist etwas völlig anderes als ein TEdit!
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.06.2003, 22:47 Uhr
~Lars
Gast


Im Ereignis "OnKeyPress" des TEdit bekommt man das gerade getippte Zeichen geliefert. Wenn es keine Zahl ist, kann man wegschmeißen.

Beispiel:

void __fastcall TfrmMain::edtTestKeyPress(TObject *Sender, char &Key)
{
if (Key == 'A') Key = 0x00;
}

Das TEdit "edtTest" ignoriert, wenn der Benutzer ein großes A drückt, es passiert nix.

Alles klar?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: