4

我正在尝试在 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;       

从 lazarus 自动生成的方法

procedure TFArena.QuitClick(Sender: TObject);
begin
  {Nothing because she's gonna be over assigned}
end;   

因此,两者都具有相同的参数“Sender:TObject”

谢谢阅读

4

1 回答 1

3

OnClick 事件必须实现一个实例的方法。您已经传递了方法的代码部分,但缺少数据和实例。

您必须获得 TController 的一个实例。现在,由于您的代码在 TController 的构造函数中运行,因此您已经有了其中之一。所以就这样写吧:

FView.Quit.OnClick := Self.QuitBtn;

当然,您总是可以省略惯用的 Self。

FView.Quit.OnClick := QuitBtn;

我也不确定 QuitBtn 是否是事件处理程序的好名字。这听起来更像是 UI 小部件的名称。

也许您正在使用需要 @ 运算符生成方法引用的编译器模式:

FView.Quit.OnClick := @QuitBtn;
于 2013-09-19T19:04:55.103 回答