Button.PerformClick是什么意思?

4
我知道这可能是一个琐碎的问题,但我只是想知道调用Button.PerformClick是否比直接调用按钮的点击事件有任何优势。MSDN文档仅表示:

为按钮生成单击事件。

这是否意味着它只是执行与调用按钮的点击事件相同的操作,还是有其他特殊的优势?

它调用该按钮的事件处理程序。 - RyPope
MSDN 对我来说似乎很直接明了。备注:可以调用此方法来引发 Click 事件。 - Prix
3
我认为了解 PerformClick() 存在的确切原因会很有趣。MSDN文档太过含糊不清。 - Jason Evans
@JasonEvans 单元测试? - dialer
@dialer,我来这里是因为我的NUnit测试失败了,因为PerformClick()没有实际执行点击。直接调用处理程序后测试通过了。我猜测这个方法只是模拟鼠标点击,但GUI在执行测试时被冻结,所以它不起作用... - Saulius Šimčikas
1个回答

12

一个不知道订阅事件的外部调用者不能直接调用点击处理程序,而事件也不能让你获取有关订阅者的信息。因此,该方法允许关注点的分离,以便外部调用者可以“友好地玩耍”。

此外:

  • 它确保应用于虚拟方法的任何多态性
  • 它应用任何规则-例如:按钮是否被禁用

如果您知道事件处理程序,并且您没有使用多态性,并且您不关心它是否禁用,并且您不需要担心已经不知道的事件处理程序-那么请随意:只需调用事件处理程序方法即可。


1
PerformClick同步执行吗? - beppe9000
@beppe9000 没有头绪;你得试一下。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接