.net – 如何指定表单打开时应该关注哪个控件?

无论何时打开表单,系统都会自动为您控制其中一个控件.据我所知,获得焦点的控件是Tab键顺序中的第一个启用控件,根据 Windows标准行为.

问题是如何在运行时更改此功能,而无需动态重新调整Tab键顺序.例如,某些表单可能希望根据程序逻辑改变最初聚焦的控件,以便将焦点放在最合适的控件中.如果您只是将其他控件集中在OnLoad处理程序中,则认逻辑仍会执行并重新聚焦认控件.

如果您使用C/C++编写并使用原始窗口过程或MFC,则可以从WM_INITDIALOG处理程序返回0(FALSE),并跳过认的聚焦逻辑.但是,我在Windows Forms找不到任何方法.我想出的最好的方法是在OnLoad完成后使用BeginInvoke设置焦点,如下所示:

protected override void OnLoad( System.EventArgs e )
{
    base.OnLoad( e );
    // ... code ...
    BeginInvoke( new MethodInvoker( () => this.someControl.Focus() ) );
}

必须有一些正确的方法来做到这一点 – 它是什么?

解决方法

在通过Reflector进行挖掘之后,我发现看起来似乎是“正确”的方法:使用 ContainerControl.ActiveControl.这可以从OnLoad(或其他地方;请参阅文档中的限制)完成,并直接告诉框架您想要哪个控件专注.

用法示例:

protected override void OnLoad( System.EventArgs e )
{
    base.OnLoad( e );
    // ... code ...
    this.ActiveControl = this.someControl;
}

这似乎是迄今为止最干净,最简单的解决方案.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些