使用表单作为变量访问另一个表单上的对象

Access object on another form with the form as a variable

我正在 Delphi 中编写一个程序,其中包括在多个表单上创建相同的动态对象(从不同时),然后另一个单元中的过程向其写入特定文本。

如何创建对象 (TMemo):

memHulp := TMemo.Create(frmHome);
with memHulp do
begin
  Parent := frmHome;
  Top := 208;
  Left := 88;
  Height := 98;
  Width := 209;
  ReadOnly := True;
end;

属性并不那么重要,它只是为了显示对象的创建以及如何引用它。

现在,我需要从一个文本文件中读取某些文本到备忘录中,这没有问题,但是当涉及到不同的表单都使用相同的自定义过程时,问题就来了。

在这种特殊情况下说 frmHome.memHulp.Lines.Add() 很容易,但是当我需要它来显示备忘录上的文本时 在所有情况下名称完全相同,但形式不同, 我遇到了一些麻烦。

frmHome部分需要是一个变量。所以我尝试了这个:

var 
  Form: TForm;
begin
  Form := Application.FindComponent('frmHome') as TForm;
end;

这不会警告我或给出错误,但是当我尝试说 Form.memHulp.Lines.Add() 时,它不起作用,而且我知道它可能没有 [= 的任何属性15=],但是如何让它看在正确的位置呢?我需要能够告诉程序查看我作为参数传递到 FindComponent() 部分的任何表单名称。

如果这完全不可能,请提出其他解决方案来实现同样的效果。

Form.memHulp 不起作用,因为 Form 是普通的 TForm 指针,而 TForm 没有 memHulp 成员。您可以改用 Form.FindComponent('memHulp'),因为您将 TForm 对象分配为备忘录的 Owner,但这需要您将 Name 分配给备忘录,例如:

memHulp := TMemo.Create(frmHome);
with memHulp do
begin
  Parent := frmHome;
  Name := 'memHulp';
  ...
end;

或者,由于您说您一次只创建 1 个 Memo 对象,您可以简单地使 memHulp 成为某个单元的 interface 部分中的全局变量,然后您将直接无需寻找即可访问它。