我想集中所有FormClosed事件的代码处理程序,有没有办法让所有正在关闭的表单自动通知?
答案 0 :(得分:3)
子类Form
并在构造函数中将某些函数与自身的FormClosed
事件挂钩?如下所示:
public class MyForm : Form
{
public MyForm(FormClosedEventHandler handler) : base()
{
this.FormClosed += handler;
}
}
然后只使用MyForm
代替Form
作为所有表单的基类。
编辑:如果您想在某个地方使用某些静态功能作为所有FormClosed
事件的处理程序,那么您当然可以使用:
public MyForm() : base()
{
this.FormClosed += Program.MyFormClosedHandler;
}
但这有点不好(很难测试,请参阅依赖注入),并且你可以使用构造函数链来实现同样的目的。
答案 1 :(得分:2)
在实例化表单后订阅您的事件处理程序。即使用+ =
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Craft
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var f = new Form2();
f.FormClosing += ClosingMonitorer;
f.Show();
var g = new Form3();
g.FormClosing += ClosingMonitorer;
g.Show();
}
void ClosingMonitorer(object sender, FormClosingEventArgs e)
{
MessageBox.Show((sender as Form).Text + " is closing");
}
}
}
[编辑:或者您可以使用扩展方法来简化事件订阅过程]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Craft
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var f = new Form2();
f.Show(ClosingMonitorer);
var g = new Form3();
g.Show(ClosingMonitorer);
}
void ClosingMonitorer(object sender, FormClosingEventArgs e)
{
MessageBox.Show((sender as Form).Text + " is closing");
}
}
public static class Helper
{
public static void Show(this Form f, FormClosingEventHandler feh)
{
f.FormClosing += feh;
f.Show();
}
}
}
答案 2 :(得分:-2)
我所知道的并不是一种简单的方法,但是如果你想学习一些新的技术,你可以通过面向方面的编程来实现。