![]() |
ValueListEditor Zeile löschen
Hallo,
was mache ich nur mit dem ValueListEditor falsch? Ich habe einen ValueListEditor mit 2 Spalten (Nummer, Eintrag), die vom Benutzer gefüllt werden sollen. In die 1. Spalte (Nummer) darf nur ein bestimmter Nummernkreis eingegeben werden können. In der 2. Spalte (Eintrag) ist alles erlaubt. Ist der Eingabewert der ersten Spalte falsch, möchte ich die gesamte Zeile löschen. Dies prüfe ich im Ereignis OnValidate des ValueListEditors nun so ab. Aber da krieg ich immer eine Zugriffsverletzung(ListenIndex überschreitet das Maximum). Bin ich da auf dem Holzweg oder wiedermal viel zu umständlich oder was haut da nicht hin?
Delphi-Quellcode:
Besten Dank für jede Hilfe!
procedure TForm1.ValueListEditor1Validate(Sender: TObject; ACol,
ARow: Integer; const KeyName, KeyValue: string); begin if (StrToInt(ValueListEditor1.Keys[ValueListEditor1.Row]) > 191) and (StrToInt(ValueListEditor1.Keys [ValueListEditor1.Row]) < 1048576) then begin if (StrToInt(ValueListEditor1.Keys[ValueListEditor1.Row]) < 0) or (StrToInt(ValueListEditor1.Keys[ValueListEditor1.Row]) > 191) then begin MessageDlg(ValueListEditor1.Keys[ValueListEditor1.Row] + ' ist kein gültiger Wert !', mtError, [mbOK], 0); ValueListEditor1.Cells[ACol, ARow] := ''; ValueListEditor1.DeleteRow(ValueListEditor1.Row); ValueListEditor1.Refresh; end; end else begin if (StrToInt(ValueListEditor1.Keys[ValueListEditor1.Row]) > 16785375) then begin MessageDlg(ValueListEditor1.Keys[ValueListEditor1.Row] + ' ist kein gültiger Wert !', mtError, [mbOK], 0); ValueListEditor1.Cells[ACol, ARow] := ''; ValueListEditor1.DeleteRow(ValueListEditor1.Row); ValueListEditor1.Refresh; end; end; end; CU Bea |
Re: ValueListEditor Zeile löschen
Ich könnte mir 2 Dinge vorstellen:
1. Nach dem Validate Aufruf greift der ValueListEditor selber nochmal auf die Zeile zu und dadurch kommt es zu der Meldung, da du die Zeile ja gelöscht hast. Daher empfehle ich dir mal, einfach Row auf einen gültigen Index zu setzen, wenn du die Zeile gelöscht hast. Dies sollte immer dann auftreten, wenn du eine Zeile löscht und die Eigenschaft Row auf der letzten Zeile steht. 2. Andere Vermutung wäre, dass der Aufruf von Refresh das Validate erneut auslöst und damit (wieder Row zu gross) zu der Fehlermeldung führt. Warum rufst du überhaupt ein Refresh auf? Dies sollte nach dem Löschen der Zeile eh automatisch geschehen. |
Re: ValueListEditor Zeile löschen
Hallo,
erstmal danke für die schnelle Antwort, ABER: zu 1.: Hab ich gemacht, bringt gar nichts, trotzdem Fehlermeldung. zu 2.: Klappt mit und ohne dem Refresh nicht. Geht nur, wenn ich nach dem "ValueListEditor1.DeleteRow(ValueListEditor1.Row); " mit "ValueListEditor1.InsertRow('', '', true);" eine leere Zeile anfüge, aber das will ich ja nicht :wall: :wall: :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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