如何在运行时创建对话框并获取返回值?

时间:2013-05-18 15:13:48

标签: delphi delphi-7 showmodaldialog

我想从当前表单类创建一个对话框,并希望从对话框中获取一个值。

这是样本编码。

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。

谢谢大家。

2 个答案:

答案 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;