如何重用事件
本文关键字:事件 何重用 | 更新日期: 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();
}
}