Eingaben in Basic-Dialogen überprüfen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Gödel2607
*
Beiträge: 15
Registriert: Fr, 22.06.2007 11:12
Wohnort: Mannheim

Eingaben in Basic-Dialogen überprüfen

Beitrag von Gödel2607 »

Mir geht es darum, Eingaben, die der Benutzer in Eingabefeldern gemacht hat, zu überprüfen, gegebenenfalls zu korrigieren oder den Benutzer zur Korrektur aufzufordern. Prinzipiell bin ich dabei (auch in anderen Programmiersprachen) so vorgegangen: an das Ereignis lostFocus (oder wie auch immer das jeweils heißt), wird eine Prozedur angebunden, die die Eingabe überprüft. Gegebenenfalls wird eine Fehlermeldung ausgegeben und der Focus auf Eingabefeld zurück gesetzt, in dem die fehlerhafte Eingabe gemacht wurde.
Das hat bislang eigentlich auch bei OOO-Basic funktioniert. Im Rahmen der Entwicklung einer umfangreicheren Anwendung hatte ich jetzt aber einen Dialog, in dem einige Eingabefelder auf diese Weise überprüft werden mußten. Das Austesten führte dann dazu, daß sich OpenOffice (incl. Schnellstarter) sang- und klanglos verabschiedete, so daß ich beim ersten Mal auch einiges an neuem Code verloren habe.
Nach einigem Probieren und Überlegen, habe ich - so denke ich jedenfalls - das Problem isoliert und eine wenig komfortable Lösung gefunden. Folgendes scheint zu passieren: ich schließe die Eingabe in einem Eingabefeld (Feld1) ab, welches dadurch den Focus verliert. Deshalb wird checkFeld1() aufgerufen. Weil die Eingabe fehlerhaft ist, wird durch die Prozedur der Focus wird auf Feld1 zurück gesetzt. Zwischenzeitlich war der Focus aber schon auf Feld2, welches nun durch das Setzen des Focus auf Feld1 den Focus verliert, wodurch nun die Prozedur checkFeld2() ausgelöst wird. Dies führt dazu, daß nun in einer Endlosschleife der Focus zwischen den beiden Feldern hin und her gesetzt wird, womöglich sogar, bevor die Prozeduren jeweils beendet werden, und OOO schließlich abstürzt. Sinnvoll wäre natürlich, wenn der Focus erst dann auf ein anderes Feld gesetzt wird, wenn das Ereignis lostFocus abgearbeitet wurde.
Gelöst habe ich dies dadurch, daß ich in jeder der check-Prozeduren als erstes ein globales Flag setze, bzw. die Prozedur sofort beende, wenn das Flag bereits gesetzt ist. An Ende der Prozedur wird das Flag natürlich wieder gelöscht.
Ist dieses Verhalten bekannt oder sogar erwünscht? Hat jemand eine elegantere Lösung des Problems gefunden?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Eingaben in Basic-Dialogen überprüfen

Beitrag von komma4 »

Gödel2607 hat geschrieben:Hat jemand eine elegantere Lösung des Problems gefunden?
...nur ein kleiner Gedanke:

versuche am Besten Fehleingaben zu vermeiden:
* Eingabebeschränkung (Wertebereich, Länge)
* Vorgaben / Auswahllisten
* Erklärungen durch Feldbezeichner, Texte, Fly-Over-Hilfe*
* wenig Felder = wenig mögliche Fehler

Wenn Alles nicht hilft - dann die Sammel-Fehlermeldung nach OK**:

Code: Alles auswählen

 ==> Ihre Eingabe war leider nicht vollständig:                   
  -  der VORNAME fehlt
  -  die Bestätigung der Kenntnisnahme der AGB fehlt
 ==> Ihre Eingabe im Feld POSTLEITZAHL ist unvollständig:
  -  es sind nur 4 Ziffern; eine PLZ in Deutschland hat 5 Stellen
***

* je nach Anwender-Erfahrung sollten die HIlfe-Level einstellbar sein
** "Profis" empfinden die Unterbrechung des Eingabeflusses durch einzelne Fehlermeldungen (Prüfung auf Feldebene) als "lästig"
*** ausführliche Meldungen und natürlich anständig lesbar formatiert


Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten