![]() |
Abfangen von Fehleingaben
Hallo,
ich möchte gerne in einem Edit-Feld Werte eingeben, und diese dann einem integer zuweisen. wie kann ich fehleingaben wie buchstaben oder ein leeres feld abfangen?
Delphi-Quellcode:
var edit : Tedit;
i : integer; [...] i=strtoint(edit.text); // gibt fehler während der Laufzeit bei falschen eingaben... [...] |
Re: Abfangen von Fehleingaben
Das hatten wir schon oft genug:
try //Zuweisung except end; |
Re: Abfangen von Fehleingaben
Try-Except geht auch, aber Fehler garnicht erst enstehen zu lassen ist viel schöner:
Im OnKeyPress des Edits überprüfen, ob die eingegebene Taste(Key) erlaubt ist. Falls sie nicht erlaubt ist einfach Key #0 zuweisen
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Zahlen:set of Char; begin Zahlen:=['1','2','3','4','5','6','7','8','9','0']; If not (Key in Zahlen) Then Key:=#0; end; |
Re: Abfangen von Fehleingaben
Vielleicht suchst Du die Funktion TryStrToInt aus der Unit SysUtils?
Gruß Hawkeye |
Re: Abfangen von Fehleingaben
@BenjaminH:
Was ist mit negativen Zahlen? Das Vorzeichen sollte natürlich nur vorne stehen... |
Re: Abfangen von Fehleingaben
Hallo,
ich würde direkt auch nur die EINGABE zulassen, welche schon die gültigen Werte enthält. Suchwort wäre hier wohl -> OnKeyPress Codebeispiel könnte für Zahlen wie folgt aussehen:
Delphi-Quellcode:
Das ganze ins OnKeyPress-Event hinterlgen und fertig.
procedure TmyProg.Integer_Edit_Press(Sender: TObject;
var Key: Char); //allgemeine Sperrung von allen Zeichen ausser //Backspace, Enter, Minus und alle Zahlen if not (key in [#8, #13, #45, #48..#57]) then key := #0; begin key := #0; Windows.Beep(2000, 250); end; //Edit-> ich war zu langsam ;-) |
Re: Abfangen von Fehleingaben
genau, das Minuszeichenn nur am Anfang zulassen könnte so gehen:
Delphi-Quellcode:
// das Minus darf nur am Anfang benutzt werden
if (EDIT.selstart <> 0) and (key = #45) then key := #0; |
Re: Abfangen von Fehleingaben
vielen Dank für die antworten, die übrigen keycodes, die mir noch gefehlt haben, konnte ich über die suche finden.
Ist echt ein prima Forum hier, dreifacher daumen hoch! :hello: |
Re: Abfangen von Fehleingaben
oh, ich seh gerade, dass ich einen keycode doch nicht finden konnte, den für die entfernen taste. kann mir jemand damit aushelfen?
und wo ich schon frage, noch eine frage fürs verständnis. warum wird bei
Delphi-Quellcode:
kein key für die ganzen "sondertasten" (enter, backspace, entfernen ect...) ausgegeben?
showmessage(inttostr(ord(key)));
gruß Martin |
Re: Abfangen von Fehleingaben
Weil die keinen haben. Da musst du mit OnKeyDown und den VirtualKeys arbeiten. Da kannst du die aber auch nicht abfangen.
|
Re: Abfangen von Fehleingaben
die kann ich nicht abfangen? also mein code hat soweit den gewünschten erfolg:
Delphi-Quellcode:
nur del fehlt da eben noch
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
Var Zahlen:set of Char; begin Zahlen:=['1','2','3','4','5','6','7','8','9','0',#8,#37,#39,#13]; //zahlen + backspace, pfeil links/rechts, enter If not (Key in Zahlen) Then Key:=#0; if key=#13 then begin Key:=#0; buttonclick(button1); end; end; |
Re: Abfangen von Fehleingaben
Del kannst du nicht abfangen, weil es kein Char ist.
Genausowenig wie Return, Shift usw. |
Re: Abfangen von Fehleingaben
das versteh ich noch nicht ganz. definiere ich
Zahlen:=['1','2','3','4','5','6','7','8','9','0']; so ist in meinem editfeld es nicht möglich, die pfeiltasten oder enter(=return?) oder backspace oder ähnliches zu nutzen. definiere ich Zahlen:=['1','2','3','4','5','6','7','8','9','0',#8,#37,#39 ,#13]; so sind pfeil links/rechts, backspace und enter möglich. was genau meinst Du genau mit abfangen, versteh ich dich da irgendwie falsch? Gruß Martin |
Re: Abfangen von Fehleingaben
Hallo happyaura,
#37 und #39 sind nicht die Pfeiltasten sondern Prozent und das einfache Hochzeichen :gruebel: Grüsse Jürgen |
Re: Abfangen von Fehleingaben
ups, da hab ich wohl was falsch rausgesucht...
pfeiltasten funktionieren tatsächlich auch ohne und del auch. ich frag mich gerade, warum ich das eben nicht einfach mal ausprobiert habe, vielleicht wird es langsam mal zeit für eine kleine pause. Vielen Dank, ich glaube, es sind erst einmal alle klarheiten beseitigt. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz