Component.Name, EComponentError bei doppelten Name.

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Component.Name, EComponentError bei doppelten Name.

Beitrag von Mathias »

Wen ich an Name einen Leerstring zuordne, geht alles ohne Fehler.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  l1, l2: TLabel;
begin
  l1 := TLabel.Create(Self);
  l1.Name := '';

  l2 := TLabel.Create(Self);
  l2.Name := '';
end;
Vergebe ich aber 2x den gleichen Namen, gibt es einen EComponentError.

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  l1, l2: TLabel;
begin
  l1 := TLabel.Create(Self);
  l1.Name := 'test';

  l2 := TLabel.Create(Self);
  l2.Name := 'test'; // gibt einen Fehler
end;
Eigentlich ein guter Mechanismus, das man keine Namen Doppelt vergibt.
Aber wieso kommt dieser Fehler bei LeerStrings nicht ?
Die wäre auch Doppelt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Component.Name, EComponentError bei doppelten Name.

Beitrag von wp_xyz »

Der Komponentenname ist primär für den Designmode gedacht, damit der Objektinspektor die Komponenten unterscheiden kann. Bei Komponenten, die zur Laufzeit erzeugt werden, braucht man aber den Namen in der Regel nicht, denn man hat den Variablennamen. (Es sei denn, man sucht eine Komponente mit "FindComponentName()", was aber m.E. unnötig umständlich ist). Deshalb muss es einen Mechanismus geben, die Duplikatsuche zu überspringen. Das passiert mit dem Leerstring.

Antworten