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

时间:2015-10-22 23:02:49

标签: c# event-handling initialization

我看到了this问题。

如果我明白了。做

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

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

使新类继承自TableLayout和...

...在构造函数中添加对handler的引用。

...创建公共独立方法,例如SetupSomeEventHandler(MouseEventHandler meh)

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

2 个答案:

答案 0 :(得分:-1)

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

WPF版

public class TableLayout 
{
    public TableLayout()
    {
    }
    public TableLayout (Action<object, RoutedEventArgs> clickHandler)
    {
        MouseClick += clickHandler;
    }
}

WinForms版本

public class TableLayout 
{
    public TableLayout()
    {
    }
    public TableLayout (Action<object, EventArgs> clickHandler)
    {
        MouseClick += clickHandler;
    }
}

然后

TableLayout tl = new TableLayout (myMouseClickHandler);

答案 1 :(得分:-1)

我将假设您正在使用WinForms,如果我告诉您如何使用Form,您可以将其应用于TableLayout类。< / p>

以下是您需要做的事情:

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