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 Auf Komponenten zugreifen (https://www.delphipraxis.net/70224-auf-komponenten-zugreifen.html)

skunker 27. Mai 2006 01:20


Auf Komponenten zugreifen
 
Hallo,

habe eine kurze Frage. Wie kann ich, wenn ich über eine Variable vom Typ TEdit zur Laufzeit mehrere Editfelder mit einem Button erstelle auf zum Beispiel das dritte Editfeld zugreifen ?

Danke!

mfg
skunker

_frank_ 27. Mai 2006 01:29

Re: Auf Komponenten zugreifen
 
wenn du dir die referenz zu dem 3. TEdit nicht gemerkt hast, nur noch über TForm.components/controls
ist aber besser sich die referenzen zu merken (z.B. in nem array of TEdit oder in ner TList)
HTH

skunker 27. Mai 2006 01:43

Re: Auf Komponenten zugreifen
 
Ok, und wie mach ich das genau ?
Hab sowas noch nie zuvor gemacht.

_frank_ 27. Mai 2006 01:46

Re: Auf Komponenten zugreifen
 
das sollte es veranschaulichen...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  for i:=0 to controlcount -1 do
  begin
    if (controls[i] is TEdit) then
      TEdit(controls[i]).Text:='blah';
  end;
end;

skunker 27. Mai 2006 01:54

Re: Auf Komponenten zugreifen
 
ja aber schon das erstellen bricht bei mir ab, bzw. ich bekomme ExceesViolation beimklick auf den Button.

Delphi-Quellcode:
editlist[i] := TEdit.Create(self);
editlist[i].Parent := self;
editlist[i].Align := alTop;
Inc(i);
oben natürlich editlist: array of TEdit;

pacman1986 27. Mai 2006 01:56

Re: Auf Komponenten zugreifen
 
Delphi-Quellcode:
i := 0;
...
inc(i);
setlength(editlist,i);
...

skunker 27. Mai 2006 02:02

Re: Auf Komponenten zugreifen
 
ok in formreate i:= 0 und in der procedur:

Delphi-Quellcode:
Inc(i);
setlength(editlist,i);
editlist[i] := TEdit.Create(self);
editlist[i].Parent := self;
editlist[i].Align := alTop;
funzt. Ich kann edits erstellen.
Wenn ich jetzt mit

editlist[3].text= 'Holla';

was in das 3 Feld machen will passiert nichts.

pacman1986 27. Mai 2006 02:07

Re: Auf Komponenten zugreifen
 
dynamische arrays fangen bei 0 an ? kann es daran liegen ?

skunker 27. Mai 2006 02:10

Re: Auf Komponenten zugreifen
 
nein ich hab 10 edits.

pacman1986 27. Mai 2006 02:12

Re: Auf Komponenten zugreifen
 
sicher das 10 edits auf dem Formular sind eigentlich muss man die doch sichtbar schalten

skunker 27. Mai 2006 02:13

Re: Auf Komponenten zugreifen
 
ja ich seh se ja und kann auch was eingeben.

_frank_ 27. Mai 2006 02:15

Re: Auf Komponenten zugreifen
 
also bei funktioniert es...(da ich d3 habe, mach ich das mal als statisches array)

Delphi-Quellcode:
var
  Form1: TForm1;
  editlist:array[1..5]of Tedit;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  for i:=low(editlist) to high(editlist) do
  begin
    editlist[i] := TEdit.Create(self);
    editlist[i].Parent := self;
    editlist[i].Align := alTop;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  editlist[3].text:='blah';
end;
mit nem dynamischen müsste es dann so etwa aussehen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
const c=5;
begin
  setlength(editlist,c);
  for i:=0 to c-1 do
  begin
    editlist[i] := TEdit.Create(self);
    editlist[i].Parent := self;
    editlist[i].Align := alTop;
  end;
end;
(ich habe die Vermutung, dass du die edits immer mit dem gleichen array-index erzeugst...)
HTH Frank

pacman1986 27. Mai 2006 02:16

Re: Auf Komponenten zugreifen
 
hab was Übersehen :P

Delphi-Quellcode:
Inc(i);
setlength(editlist,i);
editlist[i-1] := TEdit.Create(self);
editlist[i-1].Parent := self;
editlist[i-1].Align := alTop;
so muss es aussehen

skunker 27. Mai 2006 02:19

Re: Auf Komponenten zugreifen
 
funktioniertauch nicht.

@frank
deine methode ist aber nur für 5 edits limitiert oder ?

_frank_ 27. Mai 2006 02:23

Re: Auf Komponenten zugreifen
 
also die Statische Variante funktioniert 100% , hab ich getested...die dynamische kann ich hier nicht testen.
richtig, aber brauchst ja die 5 nur in ne 10 ändern ;)

HTH

skunker 27. Mai 2006 02:25

Re: Auf Komponenten zugreifen
 
schon, aber ich will ja pro klick auf den button1 ein weitere edit erzeugen.

pacman1986 27. Mai 2006 02:33

Re: Auf Komponenten zugreifen
 
dann mach doch var und nicht const

_frank_ 27. Mai 2006 02:36

Re: Auf Komponenten zugreifen
 
ahja...
i darf aber nicht lokal sein bzw. in buttonxclick nicht auf 0 oder so gesetzt werden

zeig mal kompletten code, sonst kommen wir nicht weiter...

skunker 27. Mai 2006 03:05

Re: Auf Komponenten zugreifen
 
sorry für die späte Antwort. Hier der komplette Sourcecode:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ValEdit, ExtCtrls, ButtonGroup, StdCtrls, CategoryButtons,
  ImgList, ComCtrls, XPMan,ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
  edits: TEdit;
  editlist : array[1..10] of TEdit;
  i:Integer;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(i);
//setlength(editlist,i);
editlist[i] := TEdit.Create(self);
editlist[i].Parent := self;
editlist[i].Align := alTop;
editlist[i].Visible := true;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i := 0;
end;

end.

_frank_ 27. Mai 2006 03:30

Re: Auf Komponenten zugreifen
 
also so funktioniert es bei mir...

in nem 2.buttonclick setze ich den text...

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if assigned(editlist[3]) then
    editlist[3].text:='Blah'
  else
    showmessage('not assigned');
end;
wo ist jetzt das problem?

skunker 27. Mai 2006 03:34

Re: Auf Komponenten zugreifen
 
hmm in Delphi 7 geht das nur in BDS2006 macht der mucken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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 by Thomas Breitkreuz