多个窗体如何在其加载事件上调用相同的方法

本文关键字:调用 方法 事件 加载 窗体 | 更新日期: 2023-09-27 18:04:15

在我的c#项目中有大约20个表单。我在类中创建了一个方法。我希望所有的20个表单调用该方法在他们的Load事件。我可以将Call语句一个接一个地放在每个表单的Load Event中。然而,未来的形式可能会增加。另外,也有可能某些表单在其Load事件中错误地编写Call语句。

他们是否有任何逻辑,特定的方法可以处理项目的所有形式的加载事件?我们可以使用System.Reflection获得项目的所有形式的列表。那么,是否有可能将所有这些表单的加载事件附加到类的相同特定方法?

多个窗体如何在其加载事件上调用相同的方法

您可以创建自定义表单并覆盖Onload(或任何事件)

using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace test
{
    public class MyForm : Form
    {
        protected override void OnLoad(EventArgs e)
        {                
            MessageBox.Show("test"); //call your method(s)
            base.OnLoad(e);
        }
    }
}

和你的新表单

namespace CustomFormProject
{
    public partial class Form1 : MyForm
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
             //MessageBox will be shown automatically from your base (MyForm) class
             //other codes
        }
    }
}

你可以这样做:

public partial class Form2 : MainForm
public partial class Form3 : MainForm
...
...
...
public partial class Form19 : MainForm
public partial class Form20 : MainForm

继承其他窗体中的MainForm,并在它们的Form_Load事件中调用该方法

MainForm是您在其中创建方法的类,并且您希望以其他形式访问它。

假设,下面的例子是MainForm中的方法。

public partial class MainForm : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public void Msg()
    {
        MessageBox.Show("Hello");
    }
}

通过首先继承MainForm类,在Form2_Load事件上调用Msg()方法:

public partial class Form2 : MainForm
                             ^^^^^^^^
现在,调用这个方法:
private void Form2_Load(object sender, EventArgs e)
{
    Msg();
}

类似地,对其余的表单做同样的事情。