C# 在WinForms项目中,如何将焦点设置在所有表单中的第一个输入上?

C# 在WinForms项目中,如何将焦点设置在所有表单中的第一个输入上?,c#,forms,winforms,input,C#,Forms,Winforms,Input,我有一个用WinForms构建的应用程序,上面有大量的表单(大约90个表单),现在有一个要求,当打开任何表单时,第一个输入应该集中,以便可以输入 我想象如何为一个单一的表单做到这一点。我们可以运行以下程序: var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault(); if (firstInput != null) firstInput.Focus(); var firstInput=this.Cont

我有一个用WinForms构建的应用程序,上面有大量的表单(大约90个表单),现在有一个要求,当打开任何表单时,第一个输入应该集中,以便可以输入

我想象如何为一个单一的表单做到这一点。我们可以运行以下程序:

var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault();
if (firstInput != null)
    firstInput.Focus();
var firstInput=this.Controls.OfType().FirstOrDefault();
if(firstInput!=null)
Focus();
这很好,但是在每个表单上替换它不仅是一项巨大的任务,而且是大量的代码重复

我想一次完成所有形式的测试。在这种情况下,我创建了一个基类:

public class BaseForm : Form
{
    public void SetFoucsOnFirstInput()
    {
        var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault();
        if (firstInput != null)
            firstInput.Focus();
    }
}
公共类基表单:表单
{
public void setfouconfirstinput()
{
var firstInput=this.Controls.OfType().FirstOrDefault();
if(firstInput!=null)
Focus();
}
}
并使所有形式都继承自它而不是形式。唯一的问题是如何在初始化表单后对所有表单调用此方法。搜索某个表单初始化事件,我可以在基类上订阅该事件,但没有找到


如何在Windows窗体中完成此操作?是否有任何方法可以使用我的基类方法而无需修改所有90个表单?还有更好的办法吗?或者,如果不修改每个表单本身,没有任何方法可以执行此操作?

您可以在基本表单中覆盖
OnShown(…)

public class BaseForm : Form
{

    public void override OnShown()
    {
       base.OnShown();
       SetFoucsOnFirstInput(); 
    }

    public void SetFoucsOnFirstInput()
    {
        var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault();
        if (firstInput != null)
            firstInput.Focus();
    }
}
公共类基表单:表单
{
公共无效覆盖OnShown()
{
base.OnShown();
setFouconfirstInput();
}
public void setfouconfirstinput()
{
var firstInput=this.Controls.OfType().FirstOrDefault();
if(firstInput!=null)
Focus();
}
}
每次显示新表单时,都会调用此方法一次。

但更重要的是——你不必自己叫我——框架会为你做的。

你可以使用表单加载事件来设置焦点


您熟悉标签顺序吗?创建UI时,应始终设置正确的选项卡顺序。这也有助于屏幕阅读器让用户知道与控件关联的标签。自动将焦点设置在
集合
控件的第一个元素上并不是一个好主意,因为控件将按照您将它们添加到表单的顺序添加到表单的
集合
,并且可能您将它们移动到不同的位置位置,例如表单的第一个
文本框
,可能位于表单的底部。您应该在设计时手动设置选项卡顺序。