C# 在WinForms项目中,如何将焦点设置在所有表单中的第一个输入上?
我有一个用WinForms构建的应用程序,上面有大量的表单(大约90个表单),现在有一个要求,当打开任何表单时,第一个输入应该集中,以便可以输入 我想象如何为一个单一的表单做到这一点。我们可以运行以下程序: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
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时,应始终设置正确的选项卡顺序。这也有助于屏幕阅读器让用户知道与控件关联的标签。自动将焦点设置在
集合
控件的第一个元素上并不是一个好主意,因为控件将按照您将它们添加到表单的顺序添加到表单的集合
,并且可能您将它们移动到不同的位置位置,例如表单的第一个文本框
,可能位于表单的底部。您应该在设计时手动设置选项卡顺序。