2014-02-07 45 views
0

我試圖將語言切換到我的一個程序中。訪問另一個表單上的值

如果用戶選擇一種語言,並且在運行時應用程序被翻譯。我有點在一個小型測試項目中工作。但只有當窗體是自動創建的,我不想要。

形式獲得創建的方法如下:

旁註:我大部分的形式是fsMDIChild形式。

ParametersForm := TParametersForm.Create(Self); //(consider this the mainform for now) 

在ParametersForm我

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ResourceStringsDM.ParametersF; //(consider this the second form) 
end; 

這個數據模塊設有用於ParametersForm字幕。

procedure TResourceStringsDM.ParametersF; 
begin 
    with ParametersForm do 
    begin 
    bsSkinLabel1.Caption := 'Execute Nieuwefacturen'; 
    bsSkinLabel2.Caption := 'Execute Viewfacturen'; 
    end; 
end; 

我已經加入ResourceStringsDM到實現使用ParametersForm和ParametersForm到接口ResourceStringsDM的使用。

這一切都給我一個訪問衝突的原因,在它設置標題使用ParametersForm(我想要翻譯的形式的var名稱)的過程中,但在那個時候,這個var是零。 Prolly導致它尚未完成創建表單並未填入表單var。

我得到這個所有的工作的唯一途徑是通過使用

Application.CreateForm(TParametersForm, ParametersForm); 

但我想讀它之後,以避免這一點,你應該只在您的MainForm中使用。它也不能很好地處理傳遞參數。

你們中的任何一個人有沒有任何提示或提示/幫助讓我訪問Form 2中的表單1的標題?

我大概忘了你們需要的大量信息。只要告訴我,並將其添加進去。

+0

爲什麼不能做正確,用實際'resourcestring'常數和內置的[語言支持](http://docwiki.embarcadero.com/RADStudio/XE5/en/Translation_Manager_in_the_IDE),而不是試圖自己重新發明輪子?(僅供參考:SO是專業人士的網站;「prolly」不是英語中的實際詞彙,也不是「你」,你在這裏沒有發短信給你的朋友,請用真實的話語。) –

+0

哇先生脾氣暴躁.....修正了你的娛樂語言。但你給的答案不是我所問的。 –

+0

我沒有給你答案 - 我發表了一個評論,提出一個常識性的問題,以確保你知道已經有能力做到這一點,而沒有你添加的所有kludgy東西來嘗試做它自己。就「暴躁」而言,這是專業人士的專業網站,期望您在此使用實際詞彙是完全合理的。如果用真實的語言寫一個明確的問題對你來說是不值得的,爲什麼值得我們的努力來幫助你用我們的時間來解決你的問題? –

回答

0

在「MDI應用程序」模板(文件 - >新 - 其他 - > ...>)中,既不會自動創建MDI子項,也不會在子窗體的單元中包含全局形式參考。有一個原因,一個子窗體的多個實例應該能夠同時運行。例如,當你有兩個同一子項的實例時,哪一個會將窗體引用保留?

總之,當然可以不使用這個設計,但是如果你不使用你在問題中提到的構造,你有責任爲實例分配實例,所以要麼做推薦):

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ParametersForm := Self; 
ResourceStringsDM.ParametersF; //(consider this the second form) 
end; 


或更好,實例傳遞給函數的數據模塊,以便它可以在它的工作:

procedure TResourceStringsDM.ParametersF(ParametersForm: TParametersForm); 
begin 
    with ParametersForm do 
    begin 
    bsSkinLabel1.Caption := 'Execute Nieuwefacturen'; 
    ... 

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ResourceStringsDM.ParametersF(Self); //(consider this the second form) 
end; 
+0

感謝您的回覆Sertac Akyuz!這週末我有一段時間的時候我會試試這個 –