这个有什么不同.ActiveControl = XControl,XControl.Focus()在winforms中?

时间:2014-08-16 14:20:36

标签: c# winforms

我在C#Winform项目上工作。

我不知道

之间有什么不同
  1. this.ActiveControl = XControl;
  2. XControl.Focus();
  3. 有时XControl.Focus()不起作用,我必须设置this.ActiveControl = XControl。我不知道为什么会这样。我很困惑,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

The documentation对此非常清楚:

  

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

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

你可以查看Reference Source以找出确切的内容,但这对我来说似乎是浪费时间。遵循记录的行为总是更好,而不是依赖于实现细节。

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

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