這是一個有趣的案例。德爾福 - 表單屬性FormCreate上設置時從其他表單
有登錄表單,其中設置了一些變量值,如company_id和SelectedlanguageCode,想法是將此值傳遞給MainForm屬性以使事情更快(所選語言代碼轉到數據庫進行查詢),則此值將在FormCreate事件中立即需要,但是這裏的值缺失,但在CreateForm事件後調試值剛剛顯示。
這裏是項目源代碼:
{$R *.res}
Var
LoginOK: Boolean = False;
sCompanyId: integer;
sSelectedLanguageCode: string;
begin
// The login form is created and show up
// --------------------------------------
fLogin := TfLogin.Create(nil);
try
// Show login form. When it closes, see if login worked.
fLogin.ShowModal;
LoginOK := fLogin.CanLogin;
sCompanyId := fLogin.pCompanyId;
sSelectedLanguageCode := fLogin.gDefaultLanguageCode;
finally
fLogin.DisposeOf;
end;
if not LoginOK then
Halt; // Login failed - terminate application.
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TfMain, fMain);
// Here the properties of Main are set with the values,
// when debugging the properties get the values, you can
// see the actual values when hovering over the property
fMain.gSelectedLanguage := sSelectedLanguageCode;
fMain.gUserCompany := sCompanyId;
Application.Run;
end.
但是如前所述,在主要的的CreateForm,屬性是空的...... 還有......事件的CreateForm後,性能有實際的價值。
我需要在活動的CreateForm這個值,因爲一些方法將被調用,並需要向他們發送...
我欣賞的是怎麼回事就明白我在做什麼錯了,或者如果有答案這是一個很好的理由,如果你能給我另一種方法來解決這個要求,謝謝。
如果我正確地理解你,你有雞和雞蛋的困境。您無法在創建表單之前設置屬性,但在創建表單時您已經需要這些值。因此,將這些變量放在主窗體單元中作爲全局變量(顫抖)。然後,您可以在創建表單之前設置它們,並且您的主窗體可以在需要時讀取它們。 –
當Application.CreateForm返回時,表單已經被創建並且它的FormCreate被執行。很顯然,當你沒有設置它們時,它們不能在'FormCreate'中使用,直到*'FormCreate'已經運行之後。 –
Tom,就是這樣做的,提供的代碼是應用程序代碼,它首先創建登錄表單,然後在用戶登錄後創建主表單並分配登錄的值,發佈登錄表單和顯示Main。我一直在主要屬性中使用它們的值,這是完美的,但直到我在CreateForm事件中需要它們時,才意識到具體值的存在尚未提供,只是在那裏。 – VisualFox