问题摘要: 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
方法不存在。删除此引用?”
为什么看不到继承的方法?
答案 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
关键字。