Best/Quickest 为命名空间中的所有表单覆盖表单 Class 方法的方法
Best/Quickest way to override a Form Class method for all forms in namespace
我的最终目标是我希望项目中的每个表单都能处理转义键。
我可以在项目的每个表单中重写 ProcessCmdKey 方法,但这非常耗时,而且在我看来,有点不整洁。
有没有办法将此更改应用于每个继承表单 Class 的 class?
因此从此处的评论移动答案:只需为所有表单创建基础 class,在那里(一次)覆盖 ProcessCmdKey 并从该基础 class.
继承所有表单
要创建一个基础 class,请创建一个新的空白表单,然后将您的覆盖添加到该 class。
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (keyData == Keys.Escape)
{
this.Close();
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
然后在您的所有表单中,而不是从表单 class 继承,而是从您的新基础 class.
继承
public partial class AssetForm : BaseForm
{
public AssetForm()
{
InitializeComponent();
}
}
我的最终目标是我希望项目中的每个表单都能处理转义键。
我可以在项目的每个表单中重写 ProcessCmdKey 方法,但这非常耗时,而且在我看来,有点不整洁。
有没有办法将此更改应用于每个继承表单 Class 的 class?
因此从此处的评论移动答案:只需为所有表单创建基础 class,在那里(一次)覆盖 ProcessCmdKey 并从该基础 class.
继承所有表单要创建一个基础 class,请创建一个新的空白表单,然后将您的覆盖添加到该 class。
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (keyData == Keys.Escape)
{
this.Close();
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
然后在您的所有表单中,而不是从表单 class 继承,而是从您的新基础 class.
继承public partial class AssetForm : BaseForm
{
public AssetForm()
{
InitializeComponent();
}
}