我有一个用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 中的帮助