代码之家  ›  专栏  ›  技术社区  ›  Charlie

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

  •  8
  • Charlie  · 技术社区  · 16 年前

    每当打开表单时,系统都会自动为您聚焦其中一个控件。据我所知,根据Windows标准行为,获得焦点的控件是选项卡顺序中第一个启用的控件。

    OnLoad 处理程序,默认逻辑无论如何都会执行并重新聚焦默认控件。

    如果你用C/C++编写并使用原始窗口过程,或者 MFC FALSE )从你的 WM_INITDIALOG 处理器,默认聚焦逻辑被跳过。但是,我找不到任何方法来做到这一点 Windows Forms 我想到的最好的办法就是使用 BeginInvoke 设置焦点后 OnLoad

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

    3 回复  |  直到 16 年前
        1
  •  13
  •   Charlie    16 年前

    在Reflector中挖掘后,我找到了似乎是“正确”的方法:使用 ContainerControl.ActiveControl 这可以从OnLoad(或其他地方;有关限制,请参阅文档)完成,并直接“告诉”框架您希望关注哪个控件。

    示例用法:

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

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

        2
  •  1
  •   Robert Harvey    16 年前
       public void ControlSetFocus( Control^ control )
       {
    
          // Set focus to the control, if it can receive focus.
          if ( control->CanFocus )
          {
             control->Focus();
          }
       }    
    
        3
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    Form.Activated Form.Shown 事件,看看它们是否被称为控制焦点的渲染后?

    推荐文章