Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Frage zu FindComponent


sebwa2k - So 02.05.04 14:19
Titel: Frage zu FindComponent
hallo
ich hab da eine Frage zu Findcomponent.

in meinem Programm, wird derden zur laufzeit auf einem Pagecontrol tabsheets mit einem Memo erzeugt, soweit kein Problem.

die memos wollte ich mit


Quelltext
1:
TMemo(FindComponent('Testmemo')).Lines.Add('test');                    


ansprechen, allerdings erhalte ich dabei eine Zugriffsverletzung.#
das Problem ist glaube ich das
der Parent der memos das Tabsheet ist.

auf das memo1, auf form1 kann ich so

Quelltext
1:
TMemo(FindComponent('memo1')).Lines.Add('test');                    

ohne Probleme zugreifen.
Aber wie klappt das, wenn ein Tabsheet der Parent ist???

Mit freundlichen Grüßen
Sebastian


toms - So 02.05.04 14:26

Zitat:
Aber wie klappt das, wenn ein Tabsheet der Parent ist???


Hi,

Spielt keine Rolle, ob die Form oder das TabSheet das Parent ist.

Hab's kurz ausprobiert und funzt wunderbar:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  Memo: TMemo;
begin
  Memo := TMemo.Create(Self);
  Memo.Parent := TabSheet1;
  Memo.Name := 'Testmemo';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TMemo(FindComponent('Testmemo')).Lines.Add('test');
end;


sebwa2k - So 02.05.04 14:53

Ok danke,
der entscheidende Fehler bei mir war
memo := Tmemo.create(pagecontrol1); habs nun gegen self ersetzt und es klappt.

besten dank.

schönen tag noch

Sebastian


Motzi - So 02.05.04 15:44

Delphi Hilfe hat folgendes geschrieben:
Indicates whether a given component is owned by the component.

function FindComponent(const AName: string): TComponent;

Description

FindComponent returns the component in the Components property array with the name that matches the string in the AName parameter. Use FindComponent to determine whether a given component is owned by another.

FindComponent ist eine Methode von TComponent und durchsucht das Array mit allen Komponenten die die aufrufende Instanz als Owner haben. Wenn du beim Aufruf von Create also PageControl1 angibst, dann musst du auch die FindComponent-Methode von PageControl1 aufrufen um das Memo zu finden:

Delphi-Quelltext
1:
TMemo(PageControl1.FindComponent('Testmemo')).Lines.Add('test');