构造函数的疑惑???(10分)

  • 主题发起人 主题发起人 qiuyan81
  • 开始时间 开始时间
Q

qiuyan81

Unregistered / Unconfirmed
GUEST, unregistred user!
Application.CreateForm(TMenufrm, Menufrm);
Menufrm.Show;
///下面是窗体的构造函数
Menufrm
constructor Create(Pid:string);OverLoad;

我怎么才能把Pid传递过去??????
窗体要用Application.CreateForm(TMenufrm, Menufrm);
这个方法创建。。
我是不是在钻牛角尖啊???????
 
Application.CreateForm(TMenufrm, Menufrm);
等价
MenuFrm := TMenufrm.Create(Application);
当然这个Create是TFrom默认的方法
你在子窗体中重载了Create方法之后可以按照你自己的调用
MenuFrm := TMenuFrm.Create(Pid);

在你的constructor Create(Pid:string);OverLoad;函数体中加入一句
inherited Create(Application);
 
楼上说的对阿,CreateForm确实无法传入你的参数,不过可以变通一下,比方说把它(Pid)定义成全局变量.
 
procedure TApplication.CreateForm(InstanceClass: TComponentClass
var Reference);
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance);
end;
end;
对TMenufrm 来说,CreateForm其实也只是调用的是TForm.Create(Application)
它的还有一个功能是 FMainForm := TForm(Instance);即把第一个创建的窗体设置为程序的主窗体
而且property MainForm: TForm read FMainForm;
可见对外公开的MainForm是只读的。
所以。是没有办法使用CreateForm来使用自定义的Create传参数的。那就换一种方式。用属性

TMenufrm = class(TForm)
FPID:integer;
...
public
Property PID:integer Read FPID write FPID;
end;

使用时
Application.CreateForm(TMenufrm, Menufrm);
Menufrm.PID := PID;
 
学习。
可以用全局变量
 
谁说!CreateForm不能传参?
 
CreateForm可以传参?
这个是声明
procedure CreateForm(InstanceClass: TComponentClass
var Reference);
你怎么传?
在我眼里CreateForm最大的作用其实就是把第一个创建的窗口设置为程序主窗体。
 
用public
来声明PID........
和我原来的用法一样
谢谢大家了
 
to 晚起的小虫;
我的QQ76431082,可以给你发个我写的CreateForm传参的例子!
 
后退
顶部