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