Control.Focus和Control.Select方法的区别
首先看一段MSDN中对于Focus方法的说明:
备注
如果控件成功接收输入焦点,则 Focus 方法返回 true。在不显示有焦点的任何可视提示时,控件也可能有输入焦点。这种行为主要通过下面列出的不可选择控件或从它们派生的任何控件观察到。
在下列所有条件都满足的情况下控件可被选中并可接收输入焦点:ControlStyles 的 Selectable 值设置为 true,它包含在另一个控件中,以及它的所有父控件均可见且均已启用。
下面列表中的 Windows 窗体控件是不可选择的。从这些控件派生的控件也是不可选择的。
-
LinkLabel(当控件中没有链接时)
说明 |
|---|
|
Focus 是一个主要面向自定义控件作者的低级方法。而应用程序程序员则应该对子控件使用 Select 方法或 ActiveControl 属性,或对窗体使用 Activate 方法。 |
说起来似乎有一点微妙:某些控件不能够被选择,但是可能会有输入焦点,而这个时候还没有任何可视提示,这个,真的是需要去做个测试了。
还有一个说法:Select方法会迭代查找父控件,并设置父控件为上一级容器控件(派生自ContainerControl)的ActiveControl,这个说法是不是真的也不好去确证,理论上来说也不排除确实如此。
另外,虽然MSDN中并未明确指出,但是,不可见或变灰的控件是不能获得焦点的。这引起另一个后果:在Form的Load事件中不能成功设置焦点,因为此时窗体正在加载,在它加载完成之前,控件还处于不可见的状态,一个变通的解决办法是设置对应的控件的TabIndex为0,使得它在窗体显示时被自动设置焦点。

说明
浙公网安备 33010602011771号