2013-05-18 20 views
0

我想從當前表單類創建一個對話框,並期望從對話框中獲取一個值。如何在運行時創建對話框並獲取返回值?

這是樣本編碼。

with TFormClass(FindClass('Tf_dialog_partner')).Create(Application) do 
    try 
    ShowModal; 
    Value := DialogPublicVar; 
    except 
    Free; 
    end; 

DialogPublicVar是Tf_dialog_partner(TForm的的後裔)類的公共變量,現在在我的編碼這個當前類的使用條款中不使用Tf_dialog_partner的單位,我只是用findClass的功能,我可以創建一個新的形式就好了。

此編碼錯誤,因爲此當前類不知道Tf_dialog_partner的屬性,所以它不識別DialogPublicVar。

請幫助,如何使這個當前類瞭解DialogPublicVar。

謝謝大家。

回答

2

如果返回的值是一個整數,那麼一個簡單的選項就是讓ShowModal()本身返回值。當對話框準備關閉時,它可以將其ModalResult屬性設置爲所需的值,並且ShowModal()將返回該值。

否則,您可以將變量更改爲該類的已發佈屬性,然後使用RTTI通過TypInfo.pas單元中的可用函數訪問該變量。

另一種選擇是在共享單元中定義一個接口,然後該接口聲明一個表單覆蓋以檢索該值的方法。其餘的代碼可以通過Supports()函數查詢該接口的對話框並調用公開的方法。

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; 
相關問題