![]() |
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 |
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 |
Re: Auf Komponenten zugreifen
Ok, und wie mach ich das genau ?
Hab sowas noch nie zuvor gemacht. |
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; |
Re: Auf Komponenten zugreifen
ja aber schon das erstellen bricht bei mir ab, bzw. ich bekomme ExceesViolation beimklick auf den Button.
Delphi-Quellcode:
oben natürlich editlist: array of TEdit;
editlist[i] := TEdit.Create(self);
editlist[i].Parent := self; editlist[i].Align := alTop; Inc(i); |
Re: Auf Komponenten zugreifen
Delphi-Quellcode:
i := 0;
... inc(i); setlength(editlist,i); ... |
Re: Auf Komponenten zugreifen
ok in formreate i:= 0 und in der procedur:
Delphi-Quellcode:
funzt. Ich kann edits erstellen.
Inc(i);
setlength(editlist,i); editlist[i] := TEdit.Create(self); editlist[i].Parent := self; editlist[i].Align := alTop; Wenn ich jetzt mit editlist[3].text= 'Holla'; was in das 3 Feld machen will passiert nichts. |
Re: Auf Komponenten zugreifen
dynamische arrays fangen bei 0 an ? kann es daran liegen ?
|
Re: Auf Komponenten zugreifen
nein ich hab 10 edits.
|
Re: Auf Komponenten zugreifen
sicher das 10 edits auf dem Formular sind eigentlich muss man die doch sichtbar schalten
|
Re: Auf Komponenten zugreifen
ja ich seh se ja und kann auch was eingeben.
|
Re: Auf Komponenten zugreifen
also bei funktioniert es...(da ich d3 habe, mach ich das mal als statisches array)
Delphi-Quellcode:
mit nem dynamischen müsste es dann so etwa aussehen:
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;
Delphi-Quellcode:
(ich habe die Vermutung, dass du die edits immer mit dem gleichen array-index erzeugst...)
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; HTH Frank |
Re: Auf Komponenten zugreifen
hab was Übersehen :P
Delphi-Quellcode:
so muss es aussehen
Inc(i);
setlength(editlist,i); editlist[i-1] := TEdit.Create(self); editlist[i-1].Parent := self; editlist[i-1].Align := alTop; |
Re: Auf Komponenten zugreifen
funktioniertauch nicht.
@frank deine methode ist aber nur für 5 edits limitiert oder ? |
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 |
Re: Auf Komponenten zugreifen
schon, aber ich will ja pro klick auf den button1 ein weitere edit erzeugen.
|
Re: Auf Komponenten zugreifen
dann mach doch var und nicht const
|
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... |
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. |
Re: Auf Komponenten zugreifen
also so funktioniert es bei mir...
in nem 2.buttonclick setze ich den text...
Delphi-Quellcode:
wo ist jetzt das problem?
procedure TForm1.Button2Click(Sender: TObject);
begin if assigned(editlist[3]) then editlist[3].text:='Blah' else showmessage('not assigned'); end; |
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