![]() |
letztes Element eines Records löschen
Hallo;
wie kann ich das letzt Element eines Records löschen ? Fange gerade erst mit Records an deshalb habe ich da gar keine Ahnung! Liebe Grüße |
AW: letztes Element eines Records löschen
Zitat:
|
AW: letztes Element eines Records löschen
Verwechselst Du Record mit Array?
|
AW: letztes Element eines Records löschen
Nein ich meine schon einen Record
Delphi-Quellcode:
Das ist doch ein Record ?!
Type
TEdit_Satz=record Combo_Komponente:TCombobox; Mmo_Beschreibung:TMemo; Preis_Edit:TEdit; zehn_Edit:TEdit; zehnMwSt_Edit:TEdit; zwanzig_Edit:TEdit; zwanzigMwSt_Edit:TEdit; vierzig_Edit:TEdit; vierzigMwSt_Edit: TEdit; end; |
AW: letztes Element eines Records löschen
Und welches Element soll nun gelöscht werden?
Edit: mir schwant furchtbares... |
AW: letztes Element eines Records löschen
Jetzt bin ich auch mal gespannt. VCL-Komponenten in einem Record, ok. Aber dann "das letzte" ... "löschen"? :shock:
|
AW: letztes Element eines Records löschen
so ...
Delphi-Quellcode:
private
Edit_Sätze:TEdit_Sätze; ich gehe dann her und erstelle dann mehrere Edits die eine Variable k vom Typen Integer bekommen:
Delphi-Quellcode:
wenn ich jetzt bei k z.B. auf 5 bin, wie kann ich dann das letzte Teil löschen so das k auf 4 ist ?
Edit_Sätze[k].zehn_Edit
Delphi-Quellcode:
geht schon mal nicht !
Edit_Sätze[k].zehn_Edit :=free;
Es geht nur:
Delphi-Quellcode:
!
Edit_Sätze[k].zehn_Edit :=nil;
Aber damit ist es ja nicht gelöscht ! |
AW: letztes Element eines Records löschen
Wie ist TEditSätze deklariert?
OT: ist doch niedlich, daß die IDE auch Deutsche Umlaute in Variablennamen kann, nicht? |
AW: letztes Element eines Records löschen
Also wenn man ein Objekt (z.B. Edit1) freigeben will, dann macht man das mit:
Delphi-Quellcode:
Edit1 ist dann "undefiniert". Wenn Du Edit1.Text dann etwas zuweist kann das schnell ungeahnte und unvorhersehbare Probleme verursachen.
Edit1.Free;
Deshalb kann man noch die Variable "auf Null setzen".
Delphi-Quellcode:
Beide Anweisungen lassen sich auch gemeinsam ausführen:
Edit1 := nil;
Delphi-Quellcode:
FreeAndNil(Edit1);
Soweit zum Löschen Deines Edits. Was Du genau mit Deinem Record und Deinem Array bezweckst habe ich nicht wirklich verstanden. Sicher gibt es bessere Lösungen. I.d.R. werden diese eher für Datenverwaltung verwendet. Vermutlich solltest Du Dir einmal anschauen, wie man Komponenten entwickelt. So kann man z.B. ein Panel definieren, das gleich einige Edits, Schalter usw. enthält. Noch einfacher und oft ausreichend ist die Verwendung von Frames. |
AW: letztes Element eines Records löschen
Das FreeAndNil bringt aber nur dann einen Vorteil, wenn vor jedem Zugriff auf die entsprechende Objektvariable auch auf nil bzw. Assigned geprüft wird. Ansonsten produziert man immer noch ggf. AVs.
|
AW: letztes Element eines Records löschen
Zitat:
|
AW: letztes Element eines Records löschen
Zitat:
|
AW: letztes Element eines Records löschen
Delphi-Quellcode:
type TEdit_Sätze=array of TEdit_Satz;
|
AW: letztes Element eines Records löschen
Delphi-Quellcode:
Das sollte nach meinem Dafürhalten funktionieren und nebenbei einigermaßen verständlich sein.
var
ZuLoeschendesEdit: TEdit; begin ... ZuLoeschendesEdit := Edit_Sätze[k].zehn_Edit; Edit_Sätze[k].zehn_Edit := nil; ZuLoeschendesEdit.Free; end; |
AW: letztes Element eines Records löschen
Sollte ... das k nicht noch irgendwie von alleine kleiner werden? Mich hat das ganze schon zu Beginn überfordert, ich halte mich besser raus.
Ich kann mir überhaupt nicht vorstellen, was hier grade abläuft. Wenn ich ein Bild malen würde, was sich beim Benutzer auf dem Bildschirm abspielen würde, wie sähe das aus? |
AW: letztes Element eines Records löschen
Wieso sollte k kleiner werden? Die Anzahl der Array-Elemente ist ja nicht betroffen.
|
AW: letztes Element eines Records löschen
Ich meinte nur das hier:
Zitat:
|
AW: letztes Element eines Records löschen
Achso. k wird höchstwahrscheinlich eine Schleifenvariable sein, ansonsten erschließt sich mir der Sinn auch nicht.
|
AW: letztes Element eines Records löschen
Ich weiß zwar auch nicht genau, was hier mit den Edits passieren soll, aber wäre es nicht viel eleganter, das ganze in Klassen und Listen zu verwalten anstatt in Records und Arrays.
also
Delphi-Quellcode:
Im Create werden die ganzen Komponenten erzeugt und im Destroy mit free wieder freigegeben.
Type
TEdit_Satz=class Combo_Komponente:TCombobox; Mmo_Beschreibung:TMemo; Preis_Edit:TEdit; zehn_Edit:TEdit; zehnMwSt_Edit:TEdit; zwanzig_Edit:TEdit; zwanzigMwSt_Edit:TEdit; vierzig_Edit:TEdit; vierzigMwSt_Edit: TEdit; constructor Create; destructor Destroy; override; end; Anstatt deinem Array nimmst du eine TObjectList.
Delphi-Quellcode:
var
list:TObjectList; es:TEditSatz; ... // Liste füllen es:=TEditSatz.Create; list.add(es); ... // und Löschen des letzten Objekts list.delete(list.count-1); |
AW: letztes Element eines Records löschen
Zitat:
Delphi-Quellcode:
Eventuell musst du noch die Komponenten innerhalb des Records freigeben, aber es ist bisher ja auch nicht ersichtlich, wie die da überhaupt rein kommen.
SetLength(Edit_Sätze, Length(Edit_Sätze) - 1);
dec(k); |
AW: letztes Element eines Records löschen
@Davidlocke
Wie wäre es wenn Du uns mal erklären würdest was Du erreichen willst. Ich hab den Eindruck, daß Du mit einer Rohrzange einen Nagel einschlagen willst. U.U wäre es aber besser eine Schraube und einen Schraubendreher zu nutzen. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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