使用表单作为变量访问另一个表单上的对象
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
部分中的全局变量,然后您将直接无需寻找即可访问它。
我正在 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
部分中的全局变量,然后您将直接无需寻找即可访问它。