我有一個表單正在被另一個表單打開。Delphi Modal表單位置
我設定的位置上poOwnerFormCenter,使新的形式打開這裏原來是
然而,當我提出這個新的形式,然後再回到原來的,它顯示它在哪裏,當我首先打開新表格,而不是我關閉它
我該如何解決這個問題?
謝謝!
我有一個表單正在被另一個表單打開。Delphi Modal表單位置
我設定的位置上poOwnerFormCenter,使新的形式打開這裏原來是
然而,當我提出這個新的形式,然後再回到原來的,它顯示它在哪裏,當我首先打開新表格,而不是我關閉它
我該如何解決這個問題?
謝謝!
我有點被你的問題困惑,所以我會澄清什麼,我試圖在這裏解決!...
我認爲你正在試圖做的是
當窗體2打開時,它位於Form1和Form1的中心位置隱藏。
當Form2關閉時,會顯示Form1(確切地說它隱藏在哪裏)。
我想你想要做的就是讓Form1顯示Form2被關閉的位置。
所以我猜你有一些這樣的代碼......
procedure TForm1.ButtonClick(Sender: TObject);
begin
Form2.ShowModal;
end;
和您所期望的Form2,因爲你設置窗體2的位置poOwnerFormCenter
那麼,如果我猜的所有更新Form1的位置那正確的然後所有你需要做的更新Form1的位置時,Form2關閉是
procedure TForm1.ButtonClick(Sender: TObject);
begin
Form2.ShowModal;
Left := Form2.Left;
Top := Form2.Top;
end;
這是(我猜),因爲您每次顯示時都會重新創建表單。也就是說,你做
with TForm2.Create(nil) do
try
ShowModal;
finally
Free;
end;
因爲你創建的每一個你展示它的時間TForm2
類的新實例,並摧毀它,當窗體已經關閉,位置的變化;實際上,新的TForm2
對象不可能記住任何以前的TForm2
對象的位置。他們是兩個不同的對象(是的,同一班,但沒關係)!
最簡單的解決方案是將TForm2
添加到項目選項中的「自動創建窗體」列表中。它在默認情況下是存在的,但如果您手動創建它(正如我認爲您所做的那樣,並且如上面的代碼片段所示),您應該從自動創建的表單列表中將其刪除...
IDE Screenshot http://privat.rejbrand.se/autocreateform.png
然後你確保Unit1
使用Unit2
,這樣就可以從Form1
駐留在Unit1
訪問Unit2
全球Form2
變量。在編輯Unit1
時,按下Alt + F11即可。
然後,你可以通過做
Form2.ShowModal;
第一次它顯示只是顯示Form2
,它會尊重其Position
參數,並超過其所有者形式擺正自己的位置。但它會記住它的位置,所以第二次顯示它時,它會在第一次關閉的位置。
感謝您的偉大答案,但它不是我所期待的。當我第一次打開原始表單時,移動它並打開Form2,它會在正確的位置打開。但是,當我移動Form2並返回到Form1時,它不是放置在Form2關閉的位置,而是Form2首次打開的位置。我已經在Form1中訪問Form2並使用ShowModal,並將其添加到自動創建表單中,但問題仍然存在 – KingKong 2011-05-13 16:28:02
@KingKong:因爲我的猜測是錯誤的,或者因爲您不希望每次使用相同的對象時間? – 2011-05-13 16:29:17
@安德烈亞斯對不起,這個簡短的答案之前,我一直忘記,按輸入發佈評論 – KingKong 2011-05-13 16:32:34
問題是您正在重複使用模態窗體的相同實例。設置位置僅在您第一次顯示錶單時起作用。你必須選擇這裏:
選項1
你可以在每次關閉時破壞模式窗體。一個這樣做的方式正在對OnClose
事件表格中的這一行:
Action = caFree;
當然,這意味着你每次都重新從主叫模態形式爲好。
選項2
您必須手動設置模式窗體的上OnShow
事件位置。
使用最適合您的選項。
這就是它,並且完美的工作。非常感謝! – KingKong 2011-05-13 18:05:18