Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fehlermeldungen im Dialog abfangen (https://www.delphipraxis.net/99885-fehlermeldungen-im-dialog-abfangen.html)

eticket 19. Sep 2007 06:05


Fehlermeldungen im Dialog abfangen
 
Hallo zusammen,

ich suche eine Lösung für folgendes Situation
- Aus dem Hauptprogramm wird mit DoModal ein Dialogfenster aufgerufen
- In dem Dialogfenster können Eingaben (TEdit) gemacht werden,
als auch werden Berechnungen durchgeführt mit den Eingaben.
- Wie erreiche ich, daß
bei Falscheingaben die Fehlemeldungen (ConvertError) angezeigt werden und
der User den Dialog erst mit Drücken der OK-Taste verlassen kann,
wenn die Fehler beseitigt worden sind.
Bsp: In Feld soll Zahl eingegeben werden.
User gibt Buchstabe ein
Es erscheint eine Fehlermeldung
Der OK-Button wird disabled
Der User korrigiert die falsche Eingabe
Der OK-Button wird wieder enabled
Der User verläßt den Dialog mit OK
- Ins Hauptprogramm möchte ich nur zurückspringen, wenn alle Eingaben richtig sind.

Welche Lösungen habt ihr?

Vielen Dank für eure Unterstützung.

Michael

Sharky 19. Sep 2007 06:31

Re: Fehlermeldungen im Dialog abfangen
 
Zitat:

Zitat von eticket
...
Bsp: In Feld soll Zahl eingegeben werden.
User gibt Buchstabe ein
.
.
Welche Lösungen habt ihr?

Ich würde einfach verhindern das der Anwender Buchstaben eingeben kann.
Also nicht auf "fehler" in der Eingabe reagieren sondern die Falscheingabe verhindern.

hoika 19. Sep 2007 07:24

Re: Fehlermeldungen im Dialog abfangen
 
Hallo,

Delphi-Quellcode:
procedure TFormX.Button_OK_OnClick(...);
begin
 // consistence check
  if not TryStrToInt() then Exit;

  ModalResult:= mrOK;
end;
Das setzt voraus, dass das Button-ModalResult auf mrNone bleibt.


Heiko

eticket 19. Sep 2007 11:29

Re: Fehlermeldungen im Dialog abfangen
 
Danke für den Tipp :lol: :lol:

funktioniert so.

Michael

eticket 19. Sep 2007 17:30

Re: Fehlermeldungen im Dialog abfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schade zu früh gefreut. Es klappt so nicht zuverlässig.
Anbei ein Mini-Programm
In das Edit-Feld sollen nur Zahlen eingegeben werden können.
OK soll nur möglich sein, wenn eine Zahl drin steht.

Wie kann ich falsche Zahlen verhindern?

Michael

DeddyH 19. Sep 2007 17:48

Re: Fehlermeldungen im Dialog abfangen
 
Zitat:

Zitat von eticket
In das Edit-Feld sollen nur Zahlen eingegeben werden können.

Delphi-Quellcode:
procedure TheEdit.KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9',#8]) then
    Key := #0;
end;

procedure TheEdit.Change(Sender: TObject);
begin
  btnOK.Enabled := Length(TheEdit.Text) > 0;
end;
So in der Art mache ich das immer ;)

//Edit: Dabei ist darauf zu achten, dass bei der Anzeige des Dialogs das Edit leer und der Button disabled sind, sonst bringt das so nix :mrgreen:

//Edit2: Falsches Ereignis, es muss in Keypress sein

shmia 19. Sep 2007 18:23

Re: Fehlermeldungen im Dialog abfangen
 
Bei einem Modalen Formular sollte man immer alle Prüfungen ausführen,
wenn der Benutzer OK gedrückt hat.
Man sollte nicht die Eingaben in die einzelnen Felder überprüfen und sofort ablehnen.
Warum ?
1.) die Prüfungen im Event KeyPress sind nutzlos, wenn über die Zwischenablage eingefügt wird
2.) angenommen auf dem Formular gibt es die Felder PLZ und Ort.
Man kann das Feld PLZ nur dann verlassen, wenn man 5 Ziffern eingegeben hat.
Das ist aber viel zu restriktiv!
Wenn der Benutzer die PLZ und den Ort als ein String aus einem anderen Dokument kopiert
und dann einfügen möchte scheitert er am PLZ-Feld, obwohl er nach dem Einfügen
den Ort nochmals markieren, ausschneiden und ins Ort-Feld kopieren wollte.
==> Alle Prüfungen am Schluss durchführen und dem Benutzer eine sinnvolle Exception
um die Ohren hauen:
Delphi-Quellcode:
procedure ...PlausiPruefung;
var
  msg : string;
begin
  if Length(Trim(EditPLZ.Text)) <> 5 then
     msg := 'PLZ muss 5-stellig sein'#13#10;
  if Length(EditOrt.Text) > 40 then
     msg := msg+'Ort darf maximal 40 Zeichen haben'#13#10;
  if msg <> '' then raise Exception.Create(msg);

eticket 19. Sep 2007 18:42

Re: Fehlermeldungen im Dialog abfangen
 
Die Idee die Überprüfungen zum Schluß zu machen ist ja gut.
So wie beschrieben kommt dann die Exception, wird bestätigt und
wieder auf OK gedrückt und weg ist der Dialog mit den falschen Angaben.

Hilft also nicht wirklich

shmia 19. Sep 2007 18:47

Re: Fehlermeldungen im Dialog abfangen
 
Zitat:

Zitat von eticket
So wie beschrieben kommt dann die Exception, wird bestätigt und
wieder auf OK gedrückt und weg ist der Dialog mit den falschen Angaben.

Der OK-Button muss im Property ModalResult den Wert mrNone haben.
Im Event OnClick werden dann zuerst die Plausiprüfungen gemacht.
Als letzte Zeile folgt dann
Delphi-Quellcode:
   ModalResult := mrOK;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz