我想从当前表单类创建一个对话框,并希望从对话框中获取一个值。
这是样本编码。
with TFormClass(FindClass('Tf_dialog_partner')).Create(Application) do
try
ShowModal;
Value := DialogPublicVar;
except
Free;
end;
DialogPublicVar是Tf_dialog_partner(TForm的后代)类的公共变量,目前在我的编码中,当前类不使用USES子句中的Tf_dialog_partner单元,我只使用FindClass函数,我可以创建一个新表单细
此编码是错误的,因为此当前类不知道Tf_dialog_partner的属性,因此它无法识别DialogPublicVar。
请帮助,如何让当前的课程了解DialogPublicVar。
谢谢大家。
答案 0 :(得分:2)
如果返回的值是一个整数,一个简单的选项就是让ShowModal()本身返回该值。当对话框准备好关闭时,它可以将其ModalResult属性设置为所需的值,ShowModal()将返回该值。
否则,您可以将变量更改为类的已发布属性,然后使用RTTI通过TypInfo.pas
单元中的可用功能访问它。
另一种选择是在共享单元中定义一个接口,然后表单实现该接口,其中接口声明一个表单覆盖以检索该值的方法。然后,其余代码可以通过Supports()
函数查询该接口的对话框,并调用公开的方法。
答案 1 :(得分:1)
尝试此(对于整数)或更改类型。
var a: Integer;
...
a := MyFormDialog.ShowDialog(...);
if (a = 5)
DoWork()
else
DoNotWork();
...
function TMyFormDialog.ShowDialog(...): Integer;
begin
...
ShowModal;
...
if(A)
result := 5;
else
result := 2;
end;