当前位置: 首页 > news >正文

DELPHI 构造函数传参

需求:

窗体A  调用窗体B   ,窗体B又调用 FrameC.现在要把A中的一个值 S 传给FrameC.然后执行P过程.P在执行的过程中,需要用到P值.

我最开始的设想大概如下(这是不对的):

窗体A
procedure
TMaterial2.ModifyInformationClick(Sender: TObject); //修改物料信息 beginvar fm:=TForm1.Create(nil);//创建窗口Bfm.information:='abc';fm.showmodal; end;
窗体B
procedure TForm1.FormCreate(Sender: TObject); beginvar FRM := TMaterial3.Create(Self); //创建FRAMECFRM.Parent := Self;FRM.Align := alClient;FRM.information:=information;FRM.BinData; end;

以上是一个错误的示范. TForm.Create的时候,information还是空值,fm.information:='abc'; 赋值被排在窗体B创建的后面去了.再去执行FRM.BinData;时程序就报错了

正确的方法如下:

//窗体A
Var val:='abc';
Var fm:=TFormB.CreateA(nil,val);    //注意这里是自定义的构造函数
fm.showmodal;    
fm.free
//窗体B
type
TForm1 = class(TForm)procedure FormCreate(Sender: TObject);private{ Private declarations }Finformation: string;public{ Public declarations }constructor createA(AOwner: TComponent; AInformation: string); reintroduce;property Information: string read Finformation;end;varForm1: TForm1;implementation{$R *.dfm}constructor TForm1.createA(AOwner: TComponent; AInformation: string); begininherited Create(AOwner);Finformation := AInformation;end;procedure TForm1.FormCreate(Sender: TObject); beginvar FRM := TMaterial3.Create(Self); //创建FORMCFRM.Parent := Self;FRM.Align := alClient;FRM.information := FInformation;FRM.BinData; end;

 

窗体B中有三个构造函数,分别是FormCreate,Create,CreateA,它们的运行顺序如下:

1.窗体A中首先执行了CreateA,提前把参数传递了过去.

2.CreateA 中继承了父级的Create构造函数.

3.Create构造函数又触发了窗体B中原有的FormCreate构造函数

 

http://www.zskr.cn/news/46044.html

相关文章:

  • 云调试
  • Why can people actually only speak one language
  • 基于MATLAB的3-PUU并联机构工作空间仿真分析
  • sunk cost
  • 巧夫人油烟机售后服务电话4009968065
  • 爱多集成灶售后服务电话4009968065
  • 联合丽家集成灶售后服务电话4009968065
  • 美满热水器售后服务电话4009968065
  • 法帝油烟机售后服务电话4009968065
  • 迪堡保险柜售后服务电话4009968065
  • 顾阳防盗门售后服务电话4009968065
  • 华润百尊热水器售后服务电话4009968065
  • 索帅集成灶推出24小时售后客服受理中心(2025更新上线)
  • 欧咪嘉油烟机推出24小时售后客服受理中心(2025更新上线)
  • 阳帆空气能推出24小时售后客服受理中心(2025更新上线)
  • 沈努西燃气灶推出24小时售后客服受理中心(2025更新上线)
  • 昊美达空气能售后电话4001819193维修电话24小时人工服务号码
  • 威力集成灶售后电话4001819193全市各区24小时售后服务点
  • 弥特斯空调售后电话4001819193售后维修服务热线-号码2025已更新(受理/派单
  • 三星电视售后电话4001819193全国各售后服务热线号码(2025/更新)
  • 依玛壁挂炉售后电话4001819193维修服务——服务随叫随到
  • 日野燃气灶售后电话4001819193售后维修电话(24小时网点)客服中心
  • 格瑞泰燃气灶售后电话4001819193维修售后——【各区域】——售后服务网站中心
  • 创尔特消毒柜售后电话400181919324小时全国统一400热线
  • 逆向 | 逃离鸭科夫 unity mono游戏hook
  • 论文降AI,如何高效又保真? - BUAA
  • 20251110 之所思 - 人生如梦
  • import { random, guid } from uview-plus;报错找不到uview-plus
  • *题解:P3960 [NOIP 2017 提高组] 列队
  • 基于Github Action 配置Java Python Go. Rust Nodejs C++ 实现自动发布功能