TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Rund um die LCL und andere Komponenten
Antworten
PeterS
Beiträge: 187
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von PeterS »

Hi, ich habe ein Beispiel-Programm erzeugt, mit dem für mich nicht nachvollziehbaren Fehler,
daß ich nicht mehrere Instanzen eines Frame-Objekts erzeugen kann, in einem gemeinsamen Fenster / Form.
.
Screenshot (952).png
Screenshot (952).png (14.77 KiB) 208 mal betrachtet
.
Bitte dazu die folgende Zeile aktivieren = slashes entfernen:

Code: Alles auswählen

//{$define CompileWithError}
ZIP-File siehe Anhang.

Hat jemand eine Idee, warum das so nicht geht ?

BG Peter
Frames-Example with TStringGrid.zip
(97.52 KiB) 178-mal heruntergeladen

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 421
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von Jorg3000 »

Hi!
Ich habe dein Zip nicht runtergeladen, aber weil bisher noch niemand geantwortet hat ...

Wenn du die Frames dynamisch zur Laufzeit erzeugst, kannst du nach jedem Create einfach FrameX.Name:=''; setzen, damit der Name nicht doppelt vorkommt (ein leerer Komponenten-Name ist erlaubt).

Und falls du die Frames zur Entwurfszeit per IDE aufs Form gesetzt hast, sollte automatisch ein anderer Name (fortlaufende Nummerierung) gesetzt werden.
Grüße, Jörg

dj_leinad
Beiträge: 45
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 4.3 / FPC 3.2.3)
CPU-Target: 64Bit
Wohnort: CH

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von dj_leinad »

Du versuchst 3 Frames mit dem gleichen Namen zu erstellen. Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

PeterS
Beiträge: 187
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von PeterS »

dj_leinad hat geschrieben: Di 13. Jan 2026, 09:14 Du versuchst 3 Frames mit dem gleichen Namen zu erstellen. Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Ich kann ja keine 3 Frame-Variablen mit gleichem Namen anlegen. Das würde OOP ja nicht zulassen.
=>

Code: Alles auswählen

    FrameWithTStringGrid1 : TFrameWithTStringGrid;
    FrameWithTStringGrid2 : TFrameWithTStringGrid;
    FrameWithTStringGrid3 : TFrameWithTStringGrid;
Ich verstehe nur nicht warum 3 (dynamisch erzeugte) Objekte mit 3 verschiedenen Variablen-Namen denselben Objekt-Namen bekommen.
=>
Jorg3000 hat geschrieben: Di 13. Jan 2026, 09:08 ..falls du die Frames zur Entwurfszeit per IDE aufs Form gesetzt hast, sollte automatisch ein anderer Name (fortlaufende Nummerierung) gesetzt werden.
dj_leinad hat geschrieben: Di 13. Jan 2026, 09:14 Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Ich arbeite sehr viel mit zur Laufzeit erzeugten Objekten, so ein "Fehler" ist mir aber bislang noch nicht unter gekommen. Daß man den Objekt-Namen händisch anpassen muß, ist mir halt völlig neu.

dj_leinad
Beiträge: 45
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 4.3 / FPC 3.2.3)
CPU-Target: 64Bit
Wohnort: CH

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von dj_leinad »

Hallo Peter,
es wird der Name des Frames TFrameWithTStringGrid beim erstellen verwendet. Da wird nicht TFrameWithTStringGrid1/ -2/ -3 verwendet sondern der Name des Frame FrameWithTStringGrid. Du musst beim erstellen also selber dafuer sorgen dass dieser Name eineindeutig ist.

lg Daniel
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

wp_xyz
Beiträge: 5343
Registriert: Fr 8. Apr 2011, 09:01

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von wp_xyz »

Der Variablenname eines Objektes hat nichts mit dem Wert der Eigenschaft "Name" zu tun: Unter ersterem kann man das Objekt im Quellcode ansprechen (so wie jede andere Variable, z.B "x := 1"), der letzere wird im wesentlichen nur für den Designmode und den Objektinspektor benötigt, damit der Benutzer die verschiedenen Objekte auseinander halten kann.

Die Eigenschaft "Name" ist beim Erzeugen zur Laufzeit normalerweise leer, im Designmode wird sie vom Designer mit dem Variablennamen vorbesetzt. Die Ausnahme ist TFrame, hier wird immer der direkt von der Klasse abgeleitete Name übergeben, ohne einen Nummernzusatz, der den Namen eindeutlich machen würde. Das ist m.E. ein Bug in Lazarus, ich habe einen Bug-Report geschrieben: https://gitlab.com/freepascal.org/lazar ... sues/41999 .

charlytango
Beiträge: 1221
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von charlytango »

wp_xyz hat geschrieben: Di 13. Jan 2026, 13:54 Die Ausnahme ist TFrame, hier wird immer der direkt von der Klasse abgeleitete Name übergeben, ohne einen Nummernzusatz, der den Namen eindeutlich machen würde. Das ist m.E. ein Bug in Lazarus
ich habe gerade nachgesehen -- wenn ich mehrere Frames mit gleichem Typ verwende, setze ich .Name auf Nullstring

Code: Alles auswählen

  FrameWithTStringGrid1:= TFrameWithTStringGrid.Create(Self);
  with FrameWithTStringGrid1 do begin
    Name  := '';
    Parent:= Self;
  end;

Antworten