我在C#Winform项目上工作。
我不知道
之间有什么不同this.ActiveControl = XControl;
XControl.Focus();
有时XControl.Focus()
不起作用,我必须设置this.ActiveControl = XControl
。我不知道为什么会这样。我很困惑,任何人都可以帮助我吗?
答案 0 :(得分:2)
The documentation对此非常清楚:
Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序员应该使用Select方法或ActiveControl属性进行子控件,或使用Activate方法进行表单。
所以听起来你应该设置ActiveControl
属性。它可能正在做一些Focus
不做的额外的事情。
你可以查看Reference Source以找出确切的内容,但这对我来说似乎是浪费时间。遵循记录的行为总是更好,而不是依赖于实现细节。
仅使用文档中的信息和我对Windows编程的了解,我可以很好地猜测Focus
方法只调用Win32 SetFocus
function,而ActiveControl
} property可能有一堆额外的逻辑来处理直接调用SetFocus
不起作用的情况。
例如,SetFocus
的链接文档非常明确地指出,您设置焦点的窗口必须附加到调用线程的消息队列。 ActiveControl
属性可能会解决此问题。或者,它可能具有处理嵌套控件的代码。