Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten in dynamisch erstelltem Formular ansprechen (https://www.delphipraxis.net/127807-komponenten-dynamisch-erstelltem-formular-ansprechen.html)

Luckie 19. Jan 2009 14:03


Komponenten in dynamisch erstelltem Formular ansprechen
 
Ichhabe folgendes Formular:
Delphi-Quellcode:
unit frmContact;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TDetails = class(TForm)
    edtStrasse: TLabeledEdit;
    edtPLZ: TLabeledEdit;
    edtOrt: TLabeledEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Details: TDetails;

implementation

{$R *.dfm}

end.
Das wird jetzt dynamsich erstellt:
Delphi-Quellcode:
  frmDetails := TDetails.Create(nil);
  with frmDetails do
  begin
    Caption := Format('%s %s', [Nachname, Vorname]);
    edtStrasse.Text := 'Foobar'; // Fehler edtStrasse unbekannt
    ShowModal;
    Release;
  end;
So, und jetzt stehe ich auf dem Schlauch. Warum kennt er das Edit aus dem Formular nicht? Oder anders gefragt, wie kann ich die Komponenten auf dem Formular ansprechen?

Wenn wir das schon hatte, dann habe ich es nicht gefunden. :(

DeddyH 19. Jan 2009 14:09

Re: Komponenten in dynamisch erstelltem Formular ansprechen
 
Wieso denn frmDetails und nicht Details? Wobei ich jetzt nicht sicher bin, ob das eine Rolle spielt. Ansonsten lass das with mal weg und mach es "richtig".

Bomberbb 19. Jan 2009 14:10

Re: Komponenten in dynamisch erstelltem Formular ansprechen
 
Wo steht denn der 2. Quelltext? in der selben Unit? Würde als erstes versuchen edtStrasse public zu setzen...

Gruß

BBB

blauweiss 19. Jan 2009 14:13

Re: Komponenten in dynamisch erstelltem Formular ansprechen
 
Hallo Michael,

das muß so eigentlich funktionieren !

Hast Du frmDetails deklariert vom Typ TDetails oder vom Typ TForm ?

Gruß
blauweiss

Luckie 19. Jan 2009 14:16

Re: Komponenten in dynamisch erstelltem Formular ansprechen
 
Das macht keinen Unterschied:
Delphi-Quellcode:
  Details := TDetails.Create(nil);
  Details.Caption := Format('%s %s', [Nachname, Vorname]);
  Details.edtStrasse.Text := 'Foobar';
  Details.ShowModal;
  Details.Release;
Code:
[Pascal Error] Main.pas(135): E2003 Undeclared identifier: 'edtStrasse'
Er bietet es mir auch gar nicht in der Codevervollständigung an. Aber sie müssten doch eigentlich sichtbar sein oder?

@BomberBB: Natürlich sind es zwei Units. Das eine ist der Code von der Form und das andere ist der Code, der diese Form erzeuge soll. Dabei sollen Daten an die Komponenten der Form übergeben werden.

@blauweiss: Das ist vom Typ TForm. Aber jetzt, wo du es sagst, es muss vom Typ TDetail sein. :wall:

OK, gelöst.

DeddyH 19. Jan 2009 14:21

Re: Komponenten in dynamisch erstelltem Formular ansprechen
 
Jaja, das sind die groben Feinheiten, passiert mir auch gelegentlich :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz