在另一个TForm中嵌入TForm时如何避免问题?

时间:2010-12-08 09:32:12

标签: delphi layout delphi-2007 vcl tframe

我经常将TForm后代嵌入另一个TForm后代,如下所示:

var
  Form1: TForm1;
  Form2: TForm2;
begin
  Form2.Parent      := Form1;
  Form2.BorderStyle := bsNone;
  Form2.Align       := alClient;
  Form2.Show;
end;

通常这很好用,但有时Form2中的控件没有正确对齐。对于这类问题,是否有一般的解决方法?

有人知道造成这种“错位”的原因吗?

我知道我可以使用TFrame来完成这类工作,但是我有很多库代码需要重写,我没有看到为什么TForm在{ {1}}方法不起作用?

编辑:我已将组件TForm识别为罪魁祸首,我已向组件供应商(DevExpress)提交了错误报告:

http://www.devexpress.com/issue=B194161

编辑2: DevExpress的开发人员分析了这个问题并说它实际上是Embarcadero的TcxListView组件中的一个缺陷:

http://qc.embarcadero.com/wc/qcmain.aspx?d=90324

2 个答案:

答案 0 :(得分:8)

我也是这样做的,我使用以下例程来实现它:

procedure TMyForm.PlaceInsideContainer(Container: TWinControl);
begin
  Parent := Container;
  Align := alClient;
  BorderIcons := [];
  BorderStyle := bsNone;
  ParentBackground := True;
  Show;
end;

我对此没有任何问题。我可能想象的唯一区别是BorderIcons的分配,但我怀疑这会导致问题。

答案 1 :(得分:1)

我读了一个类似的问题(你必须谷歌)并且TeamB的答案不是这样做的,因为行为是不可预测的,你应该使用TFrame(这是我一直以来所做的)。 / p>