表单对象的事件无法看到继承的方法

时间:2014-12-02 15:00:37

标签: delphi inheritance delphi-7

问题摘要: OnClick对象的TForm事件表示无法找到我指定的方法;这个方法在Form的超类中定义,我希望它可以继承。

这里我定义了“RAM Editor”窗口的基本类型(即超类),包括一个按钮以及它的OnClick事件应该做什么。

// File: RAM_Editor_Common.pas
type
  TfrmBaseRamEditor = class(TForm)
    btnMapfileLaden: TToolButton;
    procedure MapfileLaden1Click(Sender: TObject);
    // ....

procedure TfrmBaseRamEditor.Mapfileladen1Click(Sender: TObject);
begin
  if not OpenDialog2.Execute then Exit;
  StatusBar1.Panels[2].Text := OpenDialog2.FileName;
end;

这里我定义了子类:

// File: RAM_Editor_SXcp.pas
TfrmRAM_Editor_SXcp = class(RAM_Editor_Common.TfrmBaseRamEditor)

这里子类的Form使用按钮并将OnClick事件设置为超类中定义的方法:

// File: RAM_Editor_SXcp.dfm
object frmRAM_Editor_SXcp: TfrmRAM_Editor_SXcp
// ....
// ....
    object btnMapfileLaden: TToolButton
      Left = 75
      Top = 0
      Hint = 'Mapfile laden'
      Caption = 'btnMapfileLaden'
      OnClick = MapfileLaden1Click
      ImageIndex = 5
      ParentShowHint = False
      ShowHint = False
    end

但是当我尝试编译时,我得到错误:

MapfileLaden1Click引用的btnMapfileLaden.OnClick方法不存在。删除此引用?”

为什么看不到继承的方法?

1 个答案:

答案 0 :(得分:4)

您的.dfm文件不正确,而不是:

object frmRAM_Editor_SXcp: TfrmRAM_Editor_SXcp

你需要

inherited frmRAM_Editor_SXcp: TfrmRAM_Editor_SXcp

同样代替:

object btnMapfileLaden: TToolButton

你需要

inherited btnMapfileLaden: TToolButton

我猜你试图将一个公共基类注入现有的层次结构中。您已在.pas文件中进行了所需的更改,但未能在.dfm文件中进行相应的更改。视觉表单继承需要.dfm文件中的inherited关键字。