(Delphi)从父母那里打电话给孩子

圣法尔孔

父过程如何调用被自身覆盖的子过程?

type
  TBase = class(TForm)
  procedure BtnRefreshClick(Sender: TObject);
  protected
    text: string;
end;

procedure TBase.BtnRefreshClick(Sender: TObject);
begin
  showmessage(text);
end;

type
  TParent = class(TBase)
  protected
    procedure doThis;
  end;

procedure TParent.doThis;
begin
  // blah blah do something
  BtnRefreshClick(nil);
end;

type
  TChild = class(TParent)
  procedure BtnRefreshClick(Sender: TObject);
  protected
    procedure clicky; override;
  end;

procedure TChild.BtnRefreshClick(Sender: TObject);
begin
  text := 'Hello, World!';
  inherited;
end;

实际的调用过程将类似于:

child := TChild.Create;
child.doThis;

如果我尝试这样做child.BtnRefreshClick;,它将产生一个对话框,Hello, World!因为TChild.BtnRefreshClick调用sincetext设置变量。

但是,当我打电话时,child.doThis它只会显示一个空对话框,因为child.doThis打电话parent.doThis然后是??.BtnRefreshClick如何parent.doThis拨打电话child.BtnRefreshClick不可能吗

在此先感谢
Yohan W.

罗伯·肯尼迪

父类调用基类的方法,因为这是存在于父类范围内的唯一方法。编译器编译TParent代码时,它将名称绑定BtnRefreshClick到基类中的方法,而不是子类中的方法,因为子类不是父类的祖先。

通常,对于父对象调用子类的方法,该方法应在父对象(或更高版本)中声明并且为virtual如果更改TBaseBtnRefreshClick虚拟,并且更改TChild覆盖同一方法,则在TParent.doThis调用该方法时,该调用将分派到该TChild方法。

type
  TBase = class(TForm)
    procedure BtnRefreshClick(Sender: TObject); virtual;
  end;

  TChild = class(TParent)
    procedure BtnRefreshClick(Sender: TObject); override;
  end;

在表单具有通过DFM设置通过名称分配方法属性的表单的特殊情况下,另一种解决方案是如Saintfalcon的答案所示,即调用相关按钮的Click方法。TChild实例化表单上的按钮时,VCL读取DFM资源并找到与按钮OnClick事件关联的字符串“ BtnRefreshClick” 它使用表单的MethodAddress功能查找具有该名称的方法的地址,并找到属于的方法的地址TChild它将该值分配给OnClick属性。Click方法读取该属性并调用那里的任何方法。

我之前已经写过关于直接调用事件处理程序方法,调用event-handler属性和调用事件触发器之间的区别,但是那时,我还没有考虑此处所示的隐藏处理程序的方面。或在子孙类中被覆盖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

孩子从父母那里扩大

来自分类Dev

孩子打电话给父母,然后打电话回孩子...

来自分类Dev

从父母那里获得孩子班

来自分类Dev

查询以从父母和孩子那里检索缺陷

来自分类Dev

从父母那里绑定Viewmodel

来自分类Dev

尽管从父母那里打来电话,removeChild仍无法正常工作

来自分类Dev

Angular 2-如何从父母那里触发一个孩子的方法

来自分类Dev

有条件地从父母那里禁用孩子的按钮-React

来自分类Dev

如果有孩子,则从父母那里移除href,否则

来自分类Dev

从Django的孩子那里获得父母

来自分类Dev

如何从孩子那里获得父母的财产?

来自分类Dev

如何从孩子那里获得父母的财产?

来自分类Dev

从父母到孩子的动态道具绑定

来自分类Dev

如何不从父母那里继承CSS样式?

来自分类Dev

叉子-我可以从父母那里退出吗?

来自分类Dev

对从孩子那里获得父母道具的正确方法做出反应

来自分类Dev

休眠单向一对多:从孩子那里坚持父母

来自分类Dev

递归地从单亲父母那里获得所有孩子

来自分类Dev

如何使用lodash从孩子那里找到父母的名字并打印路径

来自分类Dev

休眠单向一对多:从孩子那里坚持下来的父母

来自分类Dev

父母poms可以从孩子那里获得财产吗?

来自分类Dev

Python多重处理。您如何从孩子那里获得父母的身份?

来自分类Dev

父母为什么不能从孩子那里读

来自分类Dev

如何从父母中选择一组孩子?

来自分类Dev

将功能从父母传递给孩子

来自分类Dev

如何从父母的数据类型确定“孩子”类型?

来自分类Dev

从父母到孩子的反应传递道具行为异常

来自分类Dev

Blazor将数据从父母传递给孩子

来自分类Dev

如何从父母的孩子的回报之外获取变量?

Related 相关文章

热门标签

归档