我经常将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
组件中的一个缺陷:
答案 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>