在Delphi中,在代码中编写'button.click'和单击按钮之间有区别吗?

Mua*_*mer -2 delphi button buttonclick

我有个问题.当我点击使用的按钮界面工作正常时,我想使用xxx.click自动完成这项工作,但它无法正常工作.有什么区别?

if pos(hexFileVersion, currentFWVersion) = 0 then
begin
  Memo1.Lines.Add('Versions are different from each other, updating...');
  btnReset.Click;
  sleep(500);
  btnCaptureTarget.Click;
  sleep(500);
  BProgram.Click;
  sleep(200);
  BResetLIA.Click;
end;
Run Code Online (Sandbox Code Playgroud)

J..*_*... 7

如果您在其他地方需要调用的单击处理程序中有代码,那么正确的方法是将该工作重构为单独的方法.以编程方式单击按钮作为激活事件处理程序作为执行代码的方法的手段只是不好的做法.正如其他人所指出的那样,你问题中的方法应该是等效的,但这是一种应该真正避免的编程风格.

例如,如果您有:

procedure TForm1.btnResetClick(Sender: TObject);
begin
  //
  //  here some actions are taken
  //
  //
end;
Run Code Online (Sandbox Code Playgroud)

你可以重构成:

procedure TForm1.DoReset;
begin
  //
  //  here some actions are taken
  //
  //
end;

procedure TForm1.btnResetClick(Sender: TObject);
begin
  DoReset;
end;
Run Code Online (Sandbox Code Playgroud)

这样,如果你需要DoReset在click处理程序的上下文之外,你可以写:

if pos(hexFileVersion, currentFWVersion) = 0 then begin
  Memo1.Lines.Add('Versions are different from each other, updating...');
  DoReset;      
  DoCaptureTarget;      
  DoBProgram;
  DoBResetLIA;    
end;
Run Code Online (Sandbox Code Playgroud)

作为一般规则,用户界面事件处理程序应该非常轻量级 - 它们应该具有尽可能少的代码.如果业务逻辑开始蔓延到它们应该是一个强有力的迹象,你需要整理它们.