如果您在单击处理程序中有代码需要在其他地方调用,那么正确的方法是将其重构为单独的方法。以编程方式单击按钮作为触发事件处理程序作为执行代码的一种手段只是一种糟糕的做法。正如其他人所指出的,您问题中的方法应该同样有效,但它是一种真正应该避免的编程风格。
例如,如果您有:
procedure TForm1.btnResetClick(Sender: TObject);
begin
//
// here some actions are taken
//
//
end;
您可以重构为:
procedure TForm1.DoReset;
begin
//
// here some actions are taken
//
//
end;
procedure TForm1.btnResetClick(Sender: TObject);
begin
DoReset;
end;
这样,如果您需要DoReset
在单击处理程序的上下文之外,您可以编写:
if pos(hexFileVersion, currentFWVersion) = 0 then begin
Memo1.Lines.Add('Versions are different from each other, updating...');
DoReset;
DoCaptureTarget;
DoBProgram;
DoBResetLIA;
end;
作为一般规则,用户界面事件处理程序应该是非常轻量级的——它们应该包含尽可能少的代码。如果业务逻辑开始渗入它们,那应该是一个强烈的信号,表明您需要整理它们。