如何重用事件

本文关键字:事件 何重用 | 更新日期: 2023-09-27 17:58:07

我正在创建一个c#项目。在这个项目中,我有一个mdi表单和许多子表单
所有子窗体都包含一个名为panel1的面板
现在,当子窗体打开时,我在所有子窗体中使用以下代码

所有子窗体的加载事件包含以下行

this.WindowState = FormWindowState.Maximized;

并且所有子窗体的resize事件都包含以下行

panel1.Left = (this.ClientSize.Width - panel1.Width) / 2;
panel1.Top = (this.ClientSize.Height - panel1.Height) / 2;

所以我的问题是,如果可能的话,上面的代码我只写一次,所以我不会在所有的子窗体加载和调整大小事件中写这段代码。

如何重用事件

是的,这是可能的。您必须将D_1公共功能pull up到基类事件处理程序中,然后从子类调用它们:

public partial class BaseForm : Form
{
    public BaseForm()
    {
        InitializeComponent();
        this.Load += new System.EventHandler(this.FormLoad);
        this.Resize += new System.EventHandler(this.FormResize);
    }
    protected virtual void FormLoad(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;
    }
    protected virtual void FormResize(object sender, EventArgs e)
    {
        panel1.Left = (this.ClientSize.Width - panel1.Width) / 2;
        panel1.Top = (this.ClientSize.Height - panel1.Height) / 2;
    }
    ...
}
public class DerivedForm : BaseForm
{
    protected override void FormLoad(object sender, EventArgs e)
    {
        base.FormLoad(sender, e);
        // specific code goes here
    }
    protected override void FormResize(object sender, EventArgs e)
    {
        base.FormResize(sender, e);
        // specific code goes here
    }
    ...
}

创建一个基类并从中派生每个子类。

像这样:

public class FormBase : Form
{
    public FormBase()
    {
        this.WindowState = FormWindowState.Maximized;
        // put more generic code here
    }
    ... // or here
}
public class YourMdiChild : FormBase
{
    ... // all code specific for that child
}

我认为最好的方法是在打开子窗体之前完成!

public class ChildForm : Form
{
    public void doTheSizing()
    {
        // make it maximize...
        // your sizing of pannel...
        // etc...
    }
}
public partial class ParentForm : Form
{
    public ParentForm()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        ChildForm childForm01 = new ChildForm();
        childForm01.doTheSizing();
        // now show the child window using Show() or ShowDialog().
        childForm01.ShowDialog();
    }
}