Delphi TCustomForm.SetFocusedControl和TWinControl.SetFocus之间的差异

Delphi TCustomForm.SetFocusedControl和TWinControl.SetFocus之间的差异,delphi,Delphi,我需要将焦点设置在TEdit控件上。通常,在检查控件是否可以对焦后,我使用TWinControl.SetFocus。最近,我注意到TCustomForm类提供了SetFocusedControl函数 在哪些情况下,最好使用TCustomForm.SetFocusedControl而不是TWinControl.SetFocus来设置焦点?SetFocusedControl由VCL框架在不同位置使用,以响应与焦点更改相关的windows消息。例如,如果对控件调用SetFocus,则会调用SetFoc

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


在哪些情况下,最好使用
TCustomForm.SetFocusedControl
而不是
TWinControl.SetFocus
来设置焦点?

SetFocusedControl
由VCL框架在不同位置使用,以响应与焦点更改相关的windows消息。例如,如果对控件调用
SetFocus
,则会调用
SetFocusedControl
来更新内部状态

尽管
SetFocusedControl
是一个公共方法,但它实际上是一个框架方法,仅用于从实现VCL控件的代码中调用。如果你认为它是一个私有的方法,那就更好了。它不调用Windows
SetFocus
函数(因此它不更改焦点),只更新内部状态以跟踪焦点控件

在您的情况下,您有应用程序代码,即使用VCL。您没有编写VCL控件。您应该继续调用
SetFocus
,以改变焦点。执行此操作时,VCL将根据需要在内部调用
SetFocusedControl

在哪些情况下,最好使用
TCustomForm.SetFocusedControl
而不是
TWinControl.SetFocus
来设置焦点


没有

我会更进一步,声称VCL本身的使用有时甚至是有问题的。它可能导致将非聚焦控件标识为聚焦控件。这就是一个例子。