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

3

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

在哪些情况下使用 TCustomForm.SetFocusedControl 比使用 TWinControl.SetFocus 更好,以设置焦点?

1个回答

7

SetFocusedControl在VCL框架中用于响应与焦点变化相关的窗口消息。例如,如果您在控件上调用SetFocus,则会调用SetFocusedControl以更新内部状态。

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

在您的情况下,您有使用VCL的应用程序代码。您没有编写VCL控件。您应继续调用SetFocus以实现焦点变更。当您这样做时,VCL将根据其需要内部调用SetFocusedControl

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

没有。


1
我会进一步声称,VCL自身的使用有时甚至是有问题的。这可能导致一个不可聚焦的控件被识别为聚焦控件。这里有一个例子。 - Sertac Akyuz

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