【问题标题】:How can I simulate the press of a button?如何模拟按下按钮?
【发布时间】:2012-03-05 06:33:30
【问题描述】:

我想测试一些表格。有没有办法模拟按下确定(或取消)按钮,以便按下按钮并触发与其关联的事件处理程序?

【问题讨论】:

  • 另请参阅delphi-gui-testing-and-modal-forms 的答案。
  • 您想要的模拟精度有多高?鼠标应该移动吗?按钮是否应该出现在屏幕上?按钮是否应该接收wm_LButtonDown 之类的消息?
  • @LU RD,感谢您的指点!我只是想知道如何测试模态表单。这有帮助。
  • @Rob Kennedy,我必须承认我还没有考虑到这个问题。至于现在大卫的答案是我所需要的。假设我需要更进一步,您的建议是什么?
  • 我无法真正推荐任何东西,因为我不知道您的需求是什么。

标签: delphi event-handling vcl


【解决方案1】:

最简洁的方法是调用按钮的 Click 方法。由于以下原因,这比替代方案更好:

  • 您可以读取 OnClick 属性,检查它是否不为零,然后调用该方法。但这似乎毫无意义,因为 Click 方法已经做到了这一点。复制这段代码没有意义。
  • 您可以直接调用事件处理程序,但这需要您的代码了解它。这意味着与实现细节的耦合程度不理想。
  • 调用Click 会复制用户单击时实际发生的情况。它当用户按下按钮时发生的事情。例如,它处理与按钮关联的任何操作。它设置表单 ModalResult 属性。等等。

【讨论】:

  • 这正是我想要的。我对其进行了测试,它可以工作,使我更容易测试表格。非常感谢!
【解决方案2】:

btn_ok.clickbtn_okClick(sender);

【讨论】:

    【解决方案3】:

    调用OnClick 事件处理程序不会调用Delphi 的默认事件处理程序,而只会调用用户实现的那个。我认为您应该创建自己的从TCustomButton 派生的类,并实现一个调用Click 方法的函数(它是受保护的)。

    【讨论】:

    • TCustomButton.Click 是公开的,不受保护。
    • 是的,只需在 TButton 实例上调用 Click。无需推导。
    • 在VCL中是公开的,在Firemonkey中是受保护的。
    【解决方案4】:

    对 TSpeedButton 的更正:

    @David Heffernan 描述的行为并不完全适用于组中的快速按钮。调用 Click 方法似乎不会影响按钮的“Down”状态。

    为了解决这个问题,我使用了以下代码:

    MyButton.Click;
    MyButton.Down := True;
    

    【讨论】:

      【解决方案5】:

      最好使用Button的PerformClick()方法=>

      button1.PerfomClick()
      

      如果你的Button没有处于正确的点击状态(启用false或者不可见),它不会执行点击事件方法。

      【讨论】:

      • VCL 中没有PerformClick。 WinForms 中有一个PerformClick。也许这就是你所指的。
      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多