TCustomForm.SetFocusedControl和TWinControl.SetFocus之间的区别

时间:2016-10-19 12:15:14

标签: delphi

我需要将注意力集中在TEdit控件上。通常,我会在检查控件是否可以聚焦后使用TWinControl.SetFocus。最近,我注意到TCustomForm类提供了SetFocusedControl函数。

在哪种情况下最好使用TCustomForm.SetFocusedControl代替TWinControl.SetFocus来设置焦点?

1 个答案:

答案 0 :(得分:6)

VCL框架在各个地方使用

SetFocusedControl来响应与焦点变化相关的Windows消息。例如,如果您在控件上调用SetFocus,则会调用SetFocusedControl来更新内部状态。

虽然SetFocusedControl是一个公共方法,但它实际上是一个框架方法,并且只能从实现VCL控件的代码中调用。如果您将其视为私有方法,那就更好了。它不会调用Windows SetFocus函数(因此它不会更改焦点),只会更新内部状态以跟踪焦点控制。

在您的情况下,您有应用程序代码,即使用VCL。你没有写VCL控件。您应该继续致电SetFocus以改变焦点。当您这样做时,VCL将在内部调用SetFocusedControl以满足其需求。

  

在哪种情况下最好使用TCustomForm.SetFocusedControl代替TWinControl.SetFocus来设置焦点?

无。