无论何时打开表单,系统都会自动为您控制其中一个控件.据我所知,根据Windows标准行为,获得焦点的控件是Tab键顺序中的第一个启用控件.
问题是如何在运行时更改此功能,而无需动态重新调整Tab键顺序.例如,某些表单可能希望根据程序逻辑改变最初聚焦的控件,以便将焦点放在最合适的控件中.如果您只是将其他控件集中在OnLoad
处理程序中,则默认逻辑仍会执行并重新聚焦默认控件.
如果您使用C/C++编写并使用原始窗口过程或MFC,则可以FALSE
从WM_INITDIALOG
处理程序返回0(),并跳过默认的聚焦逻辑.但是,我无法在Windows窗体中找到任何方法.我提出的最好的方法是BeginInvoke
在OnLoad
完成后设置焦点,如下所示:
protected override void OnLoad( System.EventArgs e )
{
base.OnLoad( e );
// ... code ...
BeginInvoke( new MethodInvoker( () => this.someControl.Focus() ) );
}
Run Code Online (Sandbox Code Playgroud)
必须有一些正确的方法来做到这一点 - 它是什么?
Cha*_*lie 13
在通过Reflector挖掘之后,我发现似乎是"正确"的方法:使用ContainerControl.ActiveControl.这可以从OnLoad(或其他地方;请参阅文档中的限制)来完成,并直接告诉框架您希望关注哪个控件.
用法示例:
protected override void OnLoad( System.EventArgs e )
{
base.OnLoad( e );
// ... code ...
this.ActiveControl = this.someControl;
}
Run Code Online (Sandbox Code Playgroud)
这似乎是迄今为止最干净,最简单的解决方案.
归档时间: |
|
查看次数: |
2818 次 |
最近记录: |