我有一个表单是由另一个表单打开的。
我将位置设置为poOwnerFormCenter,以便在原来的位置打开新表单。
但是,当我移动这个新表单然后返回原始表单时,它显示在我第一次打开新表单时的位置上,而不是关闭时的位置。
该怎么解决呢?
谢谢!
我对你的问题有点困惑,所以我会澄清一下我在这里要解决的问题!...
我认为你想做的是
当Form2打开时,它位于Form1的中心位置并隐藏Form1。
当Form2关闭时,Form1显示(恰好在隐藏的位置)。
我认为你想要的是让Form1在Form2关闭后显示在Form2的位置。
所以我猜你有一些代码像...
procedure TForm1.ButtonClick(Sender: TObject);
begin
Form2.ShowModal;
end;
如果你设置了Form2的位置为poOwnerFormCenter
,并希望它更新Form1的位置,那么你需要做的就是在Form2关闭时更新Form1的位置。
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
添加到项目选项中的“自动创建表单”列表中。默认情况下已经存在,但如果您手动创建它(就像我认为您正在做的那样,并且如上面的代码片段中所示),则应该从自动创建的表单列表中删除它...
然后,您确保Unit1
使用Unit2
,以便您可以从Unit1
中的Form1
访问Unit2
中的全局Form2
变量。在编辑Unit1
时,按Alt+F11即可实现。
然后,您只需执行以下操作即可显示Form2
Form2.ShowModal;
第一次显示它时,它将遵循其Position
参数,并在其所有者表单上方定位。但是,它会记住自己的位置,因此第二次显示它时,它将出现在第一次关闭时的位置。
Action = caFree;
当然,这意味着你还要每次从调用者重新创建模态表单。
选项2
你需要在OnShow
事件中手动设置模态表单的位置。
使用最适合你的选项。