![]() |
Hilfe bei onExit-Ereignis
Hallo!
Ich habe einige Editfelder auf einer Form liegen. Diese werden im onExit auf ihre Korrektheit geprüft. Das passiert aber nicht, wenn ich diese übers Mainmenü speichere (der Fokus bleibt erhalten). Wie kann ich das ändern? Hier mal nen onExit-Ereigniss:
Delphi-Quellcode:
procedure TForm1.Edit16Exit(Sender: TObject);
begin try if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then begin MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen! ' + #13#10 + ' Bitte korrigieren Sie die Eingabe! ', mtError, [mbOK], 0); ActiveControl := Edit16; end; except on EConvertError do Edit16.Text := '000'; end; end; |
Re: Hilfe bei onExit-Ereignis
Führ beim Abspeichern doch noch einmal die gesamten Tests durch, entweder direkt oder durch Aufrufen der Methoden. Das dürfte am Einfachsten sein.
|
Re: Hilfe bei onExit-Ereignis
Das habe ich mir auch gedacht. Wenn ich allerdings OnExit
vor dem Speichern auslöse, wird der Focus zurückgesetzt (richtig), aber der Savdialog wird auch runtergerattert (soll er dann aber nicht). :gruebel: |
Re: Hilfe bei onExit-Ereignis
Das wirst Du wohl um eine zentrale Prüf-Prozedur nicht herum kommen. Die ganzen OnExists kannst Du Dir dann sparen.
Wäre dann auch etwas sauberer programmiert. |
Re: Hilfe bei onExit-Ereignis
Das Problem ist, das die ganzen OnExits auf verschiedene Werte überprüft werden,
oder habe ich dich da falsch verstanden? |
Re: Hilfe bei onExit-Ereignis
Ja
Die Codes aller OnExits in eine Procedure packen und beim Speichern aufrufen
Delphi-Quellcode:
procedure TForm1.CheckInput;
begin try if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then begin MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen! ' + #13#10 + ' Bitte korrigieren Sie die Eingabe! ', mtError, [mbOK], 0); ActiveControl := Edit16; end; except on EConvertError do Edit16.Text := '000'; end; //und so weiter end; |
Re: Hilfe bei onExit-Ereignis
Werde ich testen. THX!
|
Re: Hilfe bei onExit-Ereignis
Jetzt komme ich irgendwie nicht weiter. Die Funktion sieht jetzt so aus:
Delphi-Quellcode:
Der Aufruf erfolg so:
function TForm1.CheckInput : boolean;
begin if Edit15.Text = '' then begin Edit15.Text := '--.00:00'; Result := false; end else Result := true; try if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then begin MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen! ' + #13#10 + ' Bitte korrigieren Sie die Eingabe! ', mtError, [mbOK], 0); ActiveControl := Edit16; Result := false; end else Result := true; except on EConvertError do Edit16.Text := '000'; end; try if not (StrToInt(Edit19.Text) in [05..99]) then begin MessageDlg(' Die SMS-Wiederholzeit muss zwischen 05 und 99 liegen! ' + #13#10 + ' Bitte korrigieren Sie die Eingabe! ', mtError, [mbOK], 0); ActiveControl := Edit19; Result := false; end else Result := true; except on EConvertError do Edit19.Text := '05'; end; end;
Delphi-Quellcode:
Leider klappt es nicht so wie es soll! (klappt nur im Edit 16)
begin
if (CheckInput = false) then begin if SaveDialog1.Execute then begin ............... Wo liegt der Fehler? :gruebel: |
Re: Hilfe bei onExit-Ereignis
Hi Grolle,
mir fällt auf, dass du in deinem Aufruf beim Eintreten des Fehlerfalls speicherst. Das Gegenteil hätte ich erwartet:
Delphi-Quellcode:
Wenn in einem TEdit nur 0 oder Werte von 200 bis 999 gültig sind, dann kannst du den Benutzer u.a. im Hint der Edit-Komponente vorher darüber informieren - ShowHint der Form muss dann eingeschaltet sein und ein StatusBar mit eingeschaltetem AutoHint sollte existieren. Im konkreten Fall wäre auch eine Edit-Maske oder ein SpinEdit möglich.
begin
if CheckInput then with SaveDialog do begin // ... if Execute then begin //... end end; end; Wenn der Benutzer dann immer noch falsche Werte eingibt, dann darfst du seine Eingabe nicht einfach entfernen oder ersetzen. Entweder der Benutzer darf seine Eingaben korrigieren, die er dann auch noch sehen können muss, oder dein Programm arbeitet mit Standardannahmen, die du dann in einem Bestätigungsdialog anzeigst. Im konkreten Fall würde ich die fehlerhaften Eingaben stehen lassen. Grüße vom marabu |
Re: Hilfe bei onExit-Ereignis
etwas so
Delphi-Quellcode:
function TForm1.CheckInput : boolean;
begin Result := false; if Edit15.Text = '' then begin MessageDlg('fehler bla... Edit15.Text := '--.00:00'; exit; end try if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then begin MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen! ' + #13#10 + ' Bitte korrigieren Sie die Eingabe! ', mtError, [mbOK], 0); ActiveControl := Edit16; exit; end; except on EConvertError do begin MessageDlg('fehler bla... ActiveControl := Edit16; exit; end; end; ... usw. Result := true; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 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