Delphi 如何创建表单的过程?
我有以下程序:Delphi 如何创建表单的过程?,delphi,delphi-xe,Delphi,Delphi Xe,我有以下程序: procedure TForm1.Button1Click(Sender: TObject); var a:TForm2; begin a := TForm2.Create(Self); a.Parent := ScrollBox1; a.Align := alClient; a.Show; a.SetFocus; end; 我把上面的代码改成这个,但是我收到一个错误,为什么? 我必须将此代码更改为 procedure TForm1
procedure TForm1.Button1Click(Sender: TObject);
var
a:TForm2;
begin
a := TForm2.Create(Self);
a.Parent := ScrollBox1;
a.Align := alClient;
a.Show;
a.SetFocus;
end;
我把上面的代码改成这个,但是我收到一个错误,为什么?
我必须将此代码更改为
procedure TForm1.MakeAform(aForm:Tform;Cmp:TComponent;Parent1:TWinControl;Align1:TAlign);
var
a:aForm; // Error Here
begin
a := aForm.Create(Cmp);
a.Parent := Parent1;
a.Align := Align1;
a.Show;
a.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
MakeAform(Tform2,Self,Panel1,alClient);
end;
原始代码将类TForm2传递给接收表单实例的过程。事实上,这个实例甚至没有初始化,但这实际上不是您的问题 您需要做的是在MakeAform中接收类而不是实例 您的代码应该是:
//note, in Forms.pas the type TFormClass is defined as:
// TFormClass = class of TForm;
//
//A variable of TFormClass holds a class (rather than an instance)
//and that class must be derived from TForm.
procedure TForm1.MakeAform(
FormClass: TFormClass;
Owner: TComponent;
Parent: TWinControl;
Align: TAlign
);
var
a: TForm;
begin
a := FormClass.Create(Owner);
a.Parent := Parent;
a.Align := Align;
a.Show;
a.SetFocus;
end;
还有几点:
设置焦点的目的是什么?我不知道一张表格能保持焦点。
如果您不打算在构建表单后重新设置该表单的父级,那么您最好取消Owner参数,让父级拥有该表单。
原始代码将类TForm2传递给接收表单实例的过程。事实上,这个实例甚至没有初始化,但这实际上不是您的问题 您需要做的是在MakeAform中接收类而不是实例 您的代码应该是:
//note, in Forms.pas the type TFormClass is defined as:
// TFormClass = class of TForm;
//
//A variable of TFormClass holds a class (rather than an instance)
//and that class must be derived from TForm.
procedure TForm1.MakeAform(
FormClass: TFormClass;
Owner: TComponent;
Parent: TWinControl;
Align: TAlign
);
var
a: TForm;
begin
a := FormClass.Create(Owner);
a.Parent := Parent;
a.Align := Align;
a.Show;
a.SetFocus;
end;
还有几点:
设置焦点的目的是什么?我不知道一张表格能保持焦点。
如果您不打算在构建表单后重新设置该表单的父级,那么您最好取消Owner参数,让父级拥有该表单。
更好的方法是在Form2中声明一个类过程,然后在Form1上调用该过程。Ej
TForm2
...
public
class procedure ShowForm;
end;
class procedure TForm2.ShowForm;
begin
with TForm2.Create(Application) do begin
ShowModal;
Free;
end;
end;
在表单1中,单击按钮。。。。你可以写:
TForm2.ShowForm;
更好的方法是在Form2中声明一个类过程,然后在Form1上调用该过程。Ej
TForm2
...
public
class procedure ShowForm;
end;
class procedure TForm2.ShowForm;
begin
with TForm2.Create(Application) do begin
ShowModal;
Free;
end;
end;
在表单1中,单击按钮。。。。你可以写:
TForm2.ShowForm;
如果沉默的选民能够解释上述答案的错误,那将是一件有趣的事情。赫弗南:1-a.setfocus并不重要。谢谢:如果沉默的选民能够解释上述答案的错误,那将是一件有趣的事情。赫弗南:1-a.setfocus并不重要。谢谢:为什么需要MakeAForm程序?为什么它是TForm1类的一部分?你想让我们猜测错误消息,对吗?我的猜测:未声明的标识符:A或者错误消息是标识符已重新声明?@Cosmin如果您查看代码,它将变得很明显。当OP声明一个aForm类型的变量,但aForm是一个实例而不是一个类型时,就会发生错误。@David,这不是我想说的重点。这是一个程序员的网站。我希望一个用户拨打我们的帮助热线说,但我收到了一个错误,但我希望程序员理解错误消息的重要性。提示:如果您在Delphi2010中尝试用户的确切代码,在标记行,您会得到错误消息E2007常量或预期的类型标识符。如果您突出显示消息列表中的错误消息并点击F1,您将获得一个实际有帮助的帮助页面,并给出一个类似错误的好例子。为什么需要MakeAForm过程?为什么它是TForm1类的一部分?你想让我们猜测错误消息,对吗?我的猜测:未声明的标识符:A或者错误消息是标识符已重新声明?@Cosmin如果您查看代码,它将变得很明显。当OP声明一个aForm类型的变量,但aForm是一个实例而不是一个类型时,就会发生错误。@David,这不是我想说的重点。这是一个程序员的网站。我希望一个用户拨打我们的帮助热线说,但我收到了一个错误,但我希望程序员理解错误消息的重要性。提示:如果您在Delphi2010中尝试用户的确切代码,在标记行,您会得到错误消息E2007常量或预期的类型标识符。如果您突出显示消息列表中的错误消息并点击F1,您将获得一个实际有帮助的帮助页面,并给出一个类似错误的好例子。这显然不是OP想要的,即传递类引用。它也不做任何育儿的事情,也不做OP想要做的事情,那就是传递一个类引用。它也不做任何育儿工作。