![]() |
dbNavigator Aktion abbrechen
Hallo zusammen,
kann mir jemand helfen folgendes Problem zu lösen: Vorgehensweise Eingabe in beliebiges Eingabefeld während das Eingabefeld noch den Focus besitzt klickt der Anwender auf Post im dbNavigator im onExit Ereignis des Eingabefeldes wird festgestellt dass der Eintrag nicht zulässig ist jetzt das Problem wie kann ich die eingeleitete Aktion des dbNavigators abbrechen und dem Eingabefeld den Focus zurück geben?? Gruß Sidi61 |
AW: dbNavigator Aktion abbrechen
|
AW: dbNavigator Aktion abbrechen
Hallo - ja, Abort ist mir bekannt, müsste dann aber die Gültigkeit in der onclick Methode des dbNavigator prüfen bzw. dort alle Felder die geprüft werden müssen prüfen - wollte es aber in der onexit des Eingabefeldes machen. Wenn das geht - wie wäre es mit einem kleinen Beispiel:?:
Gruß Sidi61 |
AW: dbNavigator Aktion abbrechen
Das Edit soll doch den Fokus behalten, oder? Dann sollte das TabStop beim Navigator auf false stehen und die Überprüfung und gegebenenfalls das Abort im BeforeAction-Event des Navigators erfolgen. Der Navigator-OnClick-Event wird erst nach der Ausführung der Operation aufgerufen, aber dann ist es schon zu spät.
Der Focus-Wechsel und damit das OnExit-Event des Edit kommt nur, wenn beim Navigator TabStop auf true steht (zumindest ist das bei XE7 so). |
AW: dbNavigator Aktion abbrechen
Da die Prüfung in einem dbNavigator Ereignis erfolgen muss um Abort ausführen zu können, habe ich eine function zur Prüfung erstellt und diese im dbNavigatorClick Ereignis aufgerufen und ensprechend dem Ergebnis Abort ausgeführt. Dies hatte den unschönen Effekt dass sich die Farbe des Post-Buttons veränderte. Das ganze in die dbNavigatorBeforeAction verlegt sieht besser aus.
Code:
function TForm_Schleifbrand.Eingabe_ok : boolean; var eintrag : string; ok : boolean; begin ok := true; //Feldeingabe erstpruefung prüfen if OK then begin eintrag := dbCombobox_erstpruefung.Text; if dbCombobox_erstpruefung.Items.IndexOf(eintrag) < 0 then begin ok := false; showmessage('Eintrag '+''''+eintrag+''''+' ist nicht in Auswahl für Erstprüfung enthalten!'); dbCombobox_erstpruefung.SetFocus; end; end; result := ok; end; procedure TForm_Schleifbrand.DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn); begin case Button of nbPost : if (Editmode = true) and (Eingabe_ok = false) then abort; end; end; Jetzt kommt sicher der Einwand dass dbCombobox mit Einstellung CsDropDownList eine Eingabe außerhalb der Listeneinträge nicht zulassen würde und somit eine Prüfung nicht notwendig wäre ;-) Die zur Auswahl stehenden Einträge stammen aus einer separaten Datei und können sich im Laufe der Zeit ändern, die dbCombobox hat jedoch bei Einstellung CsDropDownList die unschöne Eigenschaft nur Einträge anzuzeigen, die auch in der Liste sind d.h. ändert sich die Liste dann werden bei Datensätzen die vorher angelegt wurden und nun Einträge haben die nicht in der Liste sind, diese Einträge nicht angezeigt d.h. das Textfeld von dbCombobox bleibt leer obwohl das Feld einen Eintrag hat. Also dann besten Dank für die Unterstützung Gruß Sidi61 |
AW: dbNavigator Aktion abbrechen
Eine Überprüfung aller DB-Feld-Inhalte auf Gültigkeit würde ich im BeforePost des DataSets machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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