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