“ Form1”表单包含一个面板。
在此面板上,我们要嵌入第二个表单“ Form2”。
但是不仅应该嵌入组件,还应该嵌入功能。
我正在使用VCL表单。
我已经在此页面上尝试过本教程。
unit parent;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, child;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(Panel1);
with Form2 do
Name := 'MyForm';
Parent := Panel1;
Width := 500;
Height := 500;
Top := 10;
Left := 10;
Show;
end;
end.
unit child;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
btnCalc: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
procedure btnCalcClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.btnCalcClick(Sender: TObject);
begin
edit3.Text:=edit1.Text+edit2.Text;
end;
end.
启动时不显示该表单,并且Form2未嵌入在Form1中。
答案 0 :(得分:1)
供以后参考,当您发布有关代码的问题时,请复制并粘贴实际代码和告知可能的显示错误。
在问题的第一版中,您的代码在相同形式的构造函数中重新创建了Form1
。一段时间后,程序将失败,并显示资源不足错误。
在第二版中,您将Form1
对Form2
的错误引用更正了,您的代码仍然缺少在begin .. end
之后要设置的属性周围的with Form2 do
对。此错误会导致堆栈溢出,因为您将Form1
的父级设置为Panel1
的子级Form1
,而这是鸡-鸡蛋困境。
因为您没有提到这些错误中的任何一个,所以只能得出结论,您的代码与您所发布的代码不同,或者您认为错误消息并不重要。错误!因此,请上课并注意发布实际代码并告知任何错误消息。
此外,如果您的问题是关于表单的外观,请发布.dfm
文件内容。
Form2
的{{1}}中嵌入了以下代码Panel1
(我删除了宽度和高度设置以保持图像较小):
Form1
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(Panel1);
with Form2 do
begin
Name := 'MyForm';
Parent := Panel1;
Top := 10;
Left := 10;
Show;
end;
end;
和Top
属性看起来不符合预期。这是因为Left
属性的默认值为TForm.Position
,这意味着表单会绕过poDefaultPosOnly
和Top
设置,然后将其留给操作系统来决定位置。但是,由于为表单提供了一个父级,该父级也不适用,并且表单仅放置在0,0位置。在下面添加有关Left
属性的行(或在position
设计器中进行设置)。
Form2
现在的结果是: