AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldungen im Dialog abfangen

Ein Thema von eticket · begonnen am 19. Sep 2007 · letzter Beitrag vom 19. Sep 2007
Antwort Antwort
eticket

Registriert seit: 30. Aug 2007
17 Beiträge
 
Delphi 5 Enterprise
 
#1

Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 06:05
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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 06:31
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 07:24
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
Heiko
  Mit Zitat antworten Zitat
eticket

Registriert seit: 30. Aug 2007
17 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 11:29
Danke für den Tipp

funktioniert so.

Michael
  Mit Zitat antworten Zitat
eticket

Registriert seit: 30. Aug 2007
17 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 17:30
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
Angehängte Dateien
Dateityp: zip fehler_182.zip (177,7 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 17:48
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

//Edit2: Falsches Ereignis, es muss in Keypress sein
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 18:23
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);
Andreas
  Mit Zitat antworten Zitat
eticket

Registriert seit: 30. Aug 2007
17 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 18:42
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Fehlermeldungen im Dialog abfangen

  Alt 19. Sep 2007, 18:47
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;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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