如何将重点放在WinForms项目中所有表单的第一个输入上



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

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

var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault();
if (firstInput != null)
firstInput.Focus();

这很好,但在每个表单上替换它不仅是一项艰巨的任务,而且是大量的代码重复。

我想同时对所有形式都这样做。在这种情况下,我创建了一个基类:

public class BaseForm : Form
{
public void SetFoucsOnFirstInput()
{
var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault();
if (firstInput != null)
firstInput.Focus();
}
}

并使所有表单都继承自它而不是Form。唯一的问题是,在初始化表单后,如何在所有表单上调用此方法。在基类上搜索一些可以订阅的Form初始化事件,但没有找到。

如何在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();
}
}

每当显示新表单时,此方法将被调用一次
但更重要的是——你不必自己叫我——框架会为你做这件事的。

您可以使用表单Load事件来设置焦点。

msdn 中的帮助

最新更新