在构造函数期间设置事件处理程序

本文关键字:事件处理 程序 设置 构造函数 | 更新日期: 2023-09-27 18:18:57

我看到了这个问题。

如果我没理解错的话。

是不可能的
TableLayout tl = new TableLayout ()
{
    MouseClick += myMouseClickHandler
}

但是设置这个处理程序的首选解决方案是什么?

创建新的类继承自TableLayout和…

…向构造函数添加对处理程序的引用。

…创建像SetupSomeEventHandler(MouseEventHandler meh)这样的公共独立方法

…或者可能存在更优雅的解决方案?

在构造函数期间设置事件处理程序

如果你真的想在构造函数中设置它,你可以这样做。

<<p> WPF版本/strong>
public class TableLayout 
{
    public TableLayout()
    {
    }
    public TableLayout (Action<object, RoutedEventArgs> clickHandler)
    {
        MouseClick += clickHandler;
    }
}
<<p> WinForms版本/strong>
public class TableLayout 
{
    public TableLayout()
    {
    }
    public TableLayout (Action<object, EventArgs> clickHandler)
    {
        MouseClick += clickHandler;
    }
}
然后

TableLayout tl = new TableLayout (myMouseClickHandler);

我要假设你使用的是WinForms,如果我告诉你怎么做一个Form,你就可以把它应用到你的TableLayout类。

你需要做的是:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public Form1(MouseEventHandler handler)
        : this()
    {
        this.MouseClick += handler;
    }
}

当创建这个表单时,我可以这样做:

var form1 = new Form1((s, e) => { MessageBox.Show("You clicked me!"); })

在你的例子中,它看起来像这样:

TableLayout tl = new TableLayout(myMouseClickHandler);