我正在尝试在lazarus中实现MVC模式,我已经创建了模型和视图(直接来自设计者)。现在,我正在编写“控制器”,但是当我尝试重新分配自动生成的方法“Button.OnClick”时,我遇到了编译错误:
controller.pas(31,44) Error: Wrong number of parameters specified for call to "QuitBtn"
控制器的构造函数:
constructor TController.Create(AModel : TGame ; AView : TFArena);
begin
Model := AModel;
FView := AView;
{Compilation Error}
FView.Quit.OnClick := TController.QuitBtn;
end;
程序:
procedure TController.QuitBtn(Sender : TObject);
begin
ShowMessage('MVC READY');
end;
从拉撒路自动生成的方法
procedure TFArena.QuitClick(Sender: TObject);
begin
{Nothing because she's gonna be over assigned}
end;
所以,两者都是相同的参数“Sender:TObject”
感谢您阅读
答案 0 :(得分:3)
OnClick事件必须实现实例的方法。您已经传递了方法的代码部分,但是缺少数据,即实例。
您必须掌握TController的实例。现在,由于您的代码在TController的构造函数中运行,因此您手头有其中一个。所以就这样写:
FView.Quit.OnClick := Self.QuitBtn;
当然,你总是可以省略习惯性的自我。
FView.Quit.OnClick := QuitBtn;
我也不确定QuitBtn是一个很棒的事件处理程序名称。这听起来更像是UI小部件的名称。
也许您正在使用需要@运算符生成方法引用的编译器模式:
FView.Quit.OnClick := @QuitBtn;