我想测试一些表单。有没有一种方法可以模拟按下"确定"(或"取消")按钮,从而按下该按钮并触发与其相关的事件处理程序?
最干净的方法是调用按钮的Click方法。由于以下原因,这比其他选择要好:
- 您可以读取OnClick属性,检查它是否为nil,然后调用该方法。但这似乎毫无意义,因为Click方法已经做到了这一点。复制这个代码没有意义
- 您可以直接调用事件处理程序,但这需要您的代码了解它。这意味着与实现细节的耦合程度不理想
- 调用
Click
会复制用户单击时实际发生的情况。这是当用户按下按钮时发生的情况。例如,它处理与按钮相关联的任何操作。它设置窗体ModalResult属性。等等
btn_ok.click
或btn_okClick(sender);
调用OnClick
事件处理程序不会调用Delphi的默认事件处理程序,只会调用用户实现的事件处理程序。我认为您应该创建自己的从TCustomButton
派生的类,并实现一个调用Click
方法的函数(它是受保护的)。
TSpeedButton:的校正
@David Heffernan描述的行为并不完全适用于团队中的快速按钮。调用Click方法似乎不会影响按钮的"Down"状态。
为了解决这个问题,我使用了以下代码:
MyButton.Click;
MyButton.Down := True;
最好使用Button=>的PerformClick()
方法
button1.PerfomClick()
如果你的按钮没有处于正确的点击状态(enabled false或不可见),它将不会执行点击事件方法。