2012-03-05 199 views
5

我想测试一些表单。有没有办法模拟Ok(或Cancel)按钮的按下,以便按下按钮并触发与其关联的事件处理程序?如何模拟按钮按下?

+2

也看到这个答案为[Delphi的贵测试和模态-形式](http://stackoverflow.com/a/6574035/576719)。 – 2012-03-05 07:03:50

+2

你想要的模拟精度如何?鼠标移动了吗?按钮是否显示在屏幕上?该按钮应该接收像'wm_LButtonDown'这样的消息吗? – 2012-03-05 14:47:16

+0

@LU RD,感谢您的指点!我只是想知道如何测试模态表单。这有助于。 – Arnold 2012-03-05 20:47:45

回答

17

最简洁的方法是调用按钮的Click方法。这比以下原因更好:

  • 您可以阅读OnClick属性,检查它是否为零,然后调用该方法。但是这看起来似乎毫无意义,因为Click方法已经做到了。没有重复此代码的意思。
  • 而且你可以直接调用事件处理程序,但这需要你的代码具有它的知识。这意味着对实施细节的耦合程度不理想。
  • 调用Click可以复制用户点击时实际发生的情况。它当用户按下按钮时会发生什么。例如,它处理与按钮关联的任何操作。它设置形式ModalResult属性。等等。
+0

+1,很棒的信息..永远不会想到它, – PresleyDias 2012-03-05 09:06:50

+0

这正是我想要的。我对它进行了测试,它的工作原理让我更容易测试表单。非常感谢! – Arnold 2012-03-05 20:44:20

5

btn_ok.clickbtn_okClick(sender);

1

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

+5

'TCustomButton.Click'是公共的,不受保护。 – 2012-03-05 07:59:06

+0

是的,只需在'TButton'实例上调用'Click'即可。不需要派生。 – 2012-03-05 08:06:39

+0

它在VCL中是公共的,它在Firemonkey中受到保护。 – naXa 2014-06-28 20:22:36

-1

这是更好地使用按钮=>

button1.PerfomClick() 

PerformClick()方法如果您的按钮是不是在正确的状态,单击(启用虚假或不可见的),也不会进行点击eventmethod。

+4

VCL中没有'PerformClick'。在WinForms中有一个'PerformClick'。也许这就是你所指的。 – 2012-03-05 10:00:34