Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Texttyp eines editFelds prüfen


AceTheFace - So 05.01.03 23:18
Titel: Texttyp eines editFelds prüfen
Hi,

wenn ein user in mein editFeld (Integer)-Zahlen eintippt und ich den Inhalt in eine DB schreiben will, kommt eine eConvertError-Exception, da meine DB in der Spalte nur Strings haben will (soll ja so sein *g*!).
Aber Exceptions im fertigen Programm sind ja nicht sehr schön, deshalb will ich es jetzt so machen, dass sobald der User ein Zeichen eintippt, geprüft wird, ob das ein String oder eine Integerzahl ist. Wie mache ich denn das?
Ich dachte daran, es einfach mal so zu probieren:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TForm1.checkInput(edit:TEdit):boolean;
var zahl:Integer;
begin
try
   zahl:=StrToInt(edit.text);
   result:=true;
except
   result:=false;
   edit.text:='';
   end;

end;


Leider wirft er trotzdem die gleiche exception (warum eigentlich? Müssten doch alle exceptions abgefangen werden...)

Dies Funktion soll immer über das onChange-Ereignis des EditFelds aufgerufen werden.

Kann mir jemand helfen?

Gruss und danke,

Ace
[/code]


Christian S. - So 05.01.03 23:29

Wenn Du Dein Programm in Delphi startest, werden auch die Exceptions angezeigt, die in try-except-Blöcken stehen. Versuch' mal, das Programm außerhalb von Delphi laufen zu lassen und guck dann, ob die Exceptions noch da sind. Soltlen eigentlich nicht.

Man kann auch irgendwie ausstellen, dass die Exceptions in Delphi angezeigt werden. Ich habe leider vergessen, wie das geht, bin mir aber ziemlich sicher, es hier im Forum mal gelesen zu haben.

MfG,
Peter


Wolff68 - So 05.01.03 23:56

Um zu prüfen, ob es ein Integer ist hab ich mir mal folgende Funktion gebastelt:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function TMainForm.IsValidInteger(s: String): Boolean;
var
  i : integer;
begin
  result := false;
  IF length(s) = 0 then exit;
  IF NOT (s[1] in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
    then exit;
  For i := 2 to length(s) do begin
    IF NOT (s[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
      then begin
        result := false;
        exit;
      end;
  end;
  result := true;
end;


Vielleicht kannst das ja gebrauchen.


AceTheFace - Mo 06.01.03 00:00

Einmal Copy-Past und ein riesen Dankeschön!! :D

Gruss,

Ace


Anonymous - Mo 06.01.03 09:34

AceTheFace hat folgendes geschrieben:
Einmal Copy-Past und ein riesen Dankeschön!! :D

Nicht zu früh freuen: Rufe die Funktion mal nur mit dem Parameter '-' auf. Die Funktion liefert in diesem Fall True zurück. Ein nachfolgender Aufruf von StrToInt liefert eine Exception.

Du solltest eher den Borland-Funktionen VAL oder StrToIntDef vertrauen.

Gruß Tom