如何重用事件

时间:2014-04-14 07:16:12

标签: c#

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

所有儿童形式' load事件包含以下行。

this.WindowState = FormWindowState.Maximized;

以及所有儿童表格' resize事件包含以下行。

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

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

3 个答案:

答案 0 :(得分: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
    }
    ...
}

答案 1 :(得分:0)

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

像这样:

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
}

答案 2 :(得分:0)

我认为最好的方法是在打开子表单之前执行此操作!

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