这其中有什么不同.ActiveControl = XControl, XControl. focus()在winform

本文关键字:XControl focus winform ActiveControl 什么 | 更新日期: 2023-09-27 18:18:11

我在c# Winform项目中工作。

我不知道它们有什么不同

  1. this.ActiveControl = XControl;
  2. XControl.Focus();

有时XControl.Focus()不工作,我必须设置this.ActiveControl = XControl。我不知道为什么会这样。我很困惑,有人能帮我吗?

这其中有什么不同.ActiveControl = XControl, XControl. focus()在winform

文档对此相当清楚:

Focus是一个低级方法,主要用于自定义控件作者。相反,应用程序程序员应该使用Select方法或ActiveControl属性来处理子控件,或者使用Activate方法来处理表单。

所以听起来你应该设置ActiveControl属性。它可能在做一些Focus没有做的额外的事情。

您可以查看参考源代码以找出确切的内容,但对我来说这似乎是浪费时间。遵循文档化的行为总是更好的,而不是依赖于实现细节。

仅用文档中的信息和我对Windows编程的了解,我可以很好地猜测Focus方法只是调用Win32 SetFocus函数,而ActiveControl属性可能有一堆额外的逻辑来处理直接调用SetFocus不起作用的情况。

例如,SetFocus的链接文档非常明确地说明了您设置焦点的窗口必须附加到调用线程的消息队列。ActiveControl属性可以解决这个问题。或者,它可能有处理嵌套控件的代码。