8

我经常像这样将一个TForm后代嵌入到另一个TForm后代中:

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

通常这工作得很好,但有时 Form2 中的控件没有正确对齐。这类问题有一般的解决方法吗?

有谁知道是什么导致了这种“错位”?

我知道我可以TFrame用于这种工作,但是我有很多库代码需要重写,而且我看不出TForminTForm方法不起作用的任何原因?

编辑:我已将组件确定TcxListView为此处的罪魁祸首,我已向组件供应商(DevExpress)提交了错误报告:

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

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

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

4

2 回答 2

8

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

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

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

于 2010-12-08T09:53:16.653 回答
1

我读了一个类似的问题(你必须用谷歌搜索),TeamB 的答案是不这样做,因为行为是不可预测的,你应该使用 TFrame 代替(这是我一直在做的)。

于 2010-12-08T11:01:17.767 回答